Idées de conception de programme sur la façon d'éviter les fichiers inutiles lors du téléchargement de fichiers

Prenez l'habitude d'écrire ensemble ! C'est le 16ème jour de ma participation au "Nuggets Daily New Plan·April Update Challenge", cliquez pour voir les détails de l'événement .

Parlons d'abord du scénario général, qui est une page où un article est ajouté. L'image de couverture de l'article doit être téléchargée. Le téléchargement d'un fichier est une fonction distincte. Une fois le fichier téléchargé avec succès, l'adresse URL est renvoyée. écho dans la page. Remplissez ensuite les autres informations, et enfin cliquez sur Soumettre la base de données.

 

Cependant, la manière traditionnelle de télécharger des fichiers générera des fichiers indésirables. Par exemple, si vous téléchargez plusieurs fois des fichiers sur la page, le lien stocké dans ma base de données ne sera que le lien vers la dernière image que vous avez téléchargée. Ensuite, les photos que vous avez publiées auparavant sont en fait inutiles, et je ne collectionne pas les photos, il est donc inutile de demander ces choses.

 

Alors comment éviter ce problème ?

 

Je suis juste allé dans les cornes avant, c'est en fait très simple :

Lors du téléchargement d'un fichier, le fichier image est maintenant téléchargé dans le répertoire de cache, et le lien est renvoyé et renvoyé en écho.

Lorsque vous cliquez sur Soumettre pour écrire dans la base de données, déplacez l'image correspondant au lien d'image écrit dans la base de données vers le répertoire officiel des images.

Ensuite, écrivez une tâche planifiée pour effacer périodiquement les fichiers du répertoire cache.

Cela évitera la génération de fichiers inutiles~

 

Une autre pensée avant était:

Stockez le lien du fichier téléchargé dans une table de base de données, écrivez une méthode de tâche chronométrée pour afficher les fichiers téléchargés la veille, ces fichiers ne sont pas stockés dans la table de base de données, supprimez-les. Ensuite, effacez les données dans la table de données

Cette méthode n'est en fait pas mauvaise, mais vous devez ajouter une table de base de données pour stocker temporairement les informations de fichier qui ont été stockées dans la base de données.

Enfin, partagez la méthode de fichier de téléchargement public que j'ai encapsulée dans le framework laravel :

       /**
     * @name: 公共上传文件方法
     * @author: camellia
     * @date: 2021-02-18 
     * @param:	$file	object  文件流
     * @param:	$filepath	string  文件目录
     * @param:	$file_type	string  文件类型字符串(.png,.bmp,.mp4,.mp3)
     * @param:	$file_size	number  文件大小(字节数)
     */
    public function uploadPublic($file, $filepath, $file_type, $file_size)
    {
        try{
            // 文件存放公共目录
            $path = "./uploads/";
            if (!$file) 
            {
                $result['code'] = -1;
                $result['msg'] = '参数错误,缺少文件流信息!';
                return $result; //没有图片
            }
            //获取图片后缀(如abc.png,获取到的为png)
            $file_ext = $file->extension();

            // 允许上传图片类型数组
            $file_type_array = explode(',', $file_type);
            // 判断格式
            if (!in_array(strtolower('.' . $file_ext), $file_type_array)) 
            {
                $result['code'] = -2;
                $result['msg'] = '文件格式错误!';
                return $result; //格式不符
            }
            // 文件大小(这里取得的是字节数)
            $fileSize = $file->getSize();
            if ($fileSize >= $file_size) 
            {
                $result['code'] = -10;
                $result['msg'] = '文件大小超出限制!';
                return $result;
            }
            //文件重命名
            $new_name = date('Y-m-d-H-i-s', time()) . '_' . rand(1000000, 9999999) . '.' . $file->getClientOriginalExtension();
            // 文件保存目录
            $savepath = $path . $filepath;
            // 如果目录不存在,创建目录
            if (!is_dir($savepath)) 
            {
                $mkdir = "mkdir -p " . $savepath;
                exec($mkdir, $output, $status);
            }
            // 移动文件
            if ($file->move($savepath, $new_name)) 
            {
                $result['code'] = 1;
                $result['name'] = $new_name;
                $result['url'] =  DOMAIN.$filepath . $new_name;
                $result['path'] =  $path . $filepath . $new_name;
                $result['type'] =  $file->getClientOriginalExtension();
                $result['msg'] = '文件上传成功!';
                return $result;
            } 
            else 
            {
                $result['code'] = -3;
                $result['msg'] = '文件上传失败!';
                return $result; //移动失败
            }
        }
        catch(Exception $e)
        {
            $result['code'] = -10;
            $result['msg'] = '上传文件发生错误!';
            return $result; 
        }
        
    }
复制代码

Il y a en fait ces deux méthodes auxquelles je pense. Si vous avez de bonnes suggestions, veuillez entrer vos commentaires ci-dessous.

Bienvenue sur le blog personnel guanchao.site

Je suppose que tu aimes

Origine juejin.im/post/7087025245961322509
conseillé
Classement