Ideas de diseño de programas sobre cómo evitar archivos basura al cargar archivos

¡Acostúmbrate a escribir juntos! Este es el día 16 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

Primero hablemos del escenario general, que es una página donde se agrega un artículo. La imagen de portada del artículo debe cargarse. Cargar un archivo es una función separada. Después de que el archivo se carga correctamente, se devuelve la dirección URL. eco en la página. Luego complete la otra información y finalmente haga clic en Enviar base de datos.

 

Sin embargo, la forma tradicional de cargar archivos generará algunos archivos basura. Por ejemplo, si carga archivos varias veces en la página, el enlace almacenado en mi base de datos solo será el enlace a la última imagen que cargó. Entonces, las fotos que publicaste antes son realmente inútiles, y yo no colecciono fotos, así que es inútil pedir esas cosas.

 

Entonces, ¿cómo evitar este problema?

 

Acabo de entrar en los cuernos antes, en realidad es muy simple:

Al cargar un archivo, ahora el archivo de imagen se carga en el directorio de caché, y el enlace se devuelve y se repite.

Al hacer clic en Enviar para escribir en la base de datos, mueva la imagen correspondiente al enlace de imagen escrito en la base de datos al directorio oficial de imágenes.

Luego escriba una tarea programada para borrar periódicamente los archivos en el directorio de caché.

Esto evitará la generación de archivos basura~

 

Otro pensamiento antes fue:

Guarde el enlace del archivo cargado en una tabla de la base de datos, escriba un método de tarea programada para ver los archivos cargados el día anterior, esos archivos no están almacenados en la tabla de la base de datos, elimínelos. Luego borre los datos en la tabla de datos

Este método en realidad no es malo, pero debe agregar una tabla de base de datos para almacenar temporalmente la información del archivo que se ha almacenado en la base de datos.

Finalmente, comparta el método de archivo de carga pública que encapsulé en el marco de 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; 
        }
        
    }
复制代码

En realidad, hay estos dos métodos en los que pienso. Si tiene buenas sugerencias, ingrese sus comentarios a continuación.

Bienvenidos al blog personal guanchao.site

Supongo que te gusta

Origin juejin.im/post/7087025245961322509
Recomendado
Clasificación