Idéias de design de programas sobre como evitar arquivos indesejados ao fazer upload de arquivos

Adquira o hábito de escrever juntos! Este é o 16º dia da minha participação no "Nuggets Daily New Plan·April Update Challenge", clique para ver os detalhes do evento .

Vamos falar sobre o cenário geral primeiro, que é uma página onde um artigo é adicionado. A imagem da capa do artigo precisa ser carregada. O upload de um arquivo é uma função separada. Depois que o arquivo é carregado com sucesso, o endereço url é retornado. eco na página. Em seguida, preencha as demais informações e, por fim, clique em Enviar banco de dados.

 

No entanto, a forma tradicional de upload de arquivos irá gerar alguns arquivos inúteis, por exemplo, se você fizer upload de arquivos várias vezes na página, o link armazenado no meu banco de dados será apenas o link para a última foto que você carregou. Então as fotos que você postou antes são realmente inúteis, e eu não coleciono fotos, então é inútil pedir essas coisas.

 

Então, como evitar esse problema?

 

Acabei de entrar nos chifres antes, na verdade é muito simples:

Ao carregar um arquivo, agora o arquivo de imagem é carregado no diretório de cache e o link é retornado e ecoado.

Ao clicar em Enviar para gravar no banco de dados, mova a imagem correspondente ao link da imagem gravada no banco de dados para o diretório oficial de imagens.

Em seguida, escreva uma tarefa agendada para limpar periodicamente os arquivos no diretório de cache.

Isso evitará a geração de arquivos indesejados~

 

Outro pensamento anterior foi:

Armazene o link do arquivo carregado em uma tabela de banco de dados, escreva um método de tarefa cronometrada para visualizar os arquivos carregados no dia anterior, esses arquivos não são armazenados na tabela de banco de dados, exclua-os. Em seguida, limpe os dados na tabela de dados

Esse método na verdade não é ruim, mas você precisa adicionar uma tabela de banco de dados para armazenar temporariamente as informações do arquivo que foram armazenadas no banco de dados.

Por fim, compartilhe o método de arquivo de upload público que encapsulei no 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; 
        }
        
    }
复制代码

Na verdade, existem esses dois métodos que eu penso. Se você tiver boas sugestões, por favor, insira seus comentários abaixo.

Bem vindo ao blog pessoal guanchao.site

Acho que você gosta

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