Arquivo de upload do SpringBoot: o diretório de arquivo temporário não existe

Problema: Após a
implantação do projeto springboot no servidor, após a execução por um período de tempo, ao processar algumas interfaces de upload de arquivos, uma exceção é relatada posteriormente.


Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.7333297176951596407.9000/work/Tomcat/localhost/ROOT] is not valid。

Ou seja, o diretório de arquivo temporário não existe.

Motivo: Depois de
verificar as informações, verificou-se que o linux limpava automaticamente os arquivos em '/ tmp'.
Após o início do projeto springboot, o sistema criará automaticamente vários diretórios no diretório '/ tmp' (meu projeto é a seguinte pasta)

  1. hsperfdata_root ,
  2. tomcat. ************. 8080, (O fim é o fim do projeto
  3. tomcat-docbase. *********. 8080.
    Ao processar solicitações no formato Multipart (formulário-dados), os arquivos temporários são criados no segundo diretório por padrão.

O principal motivo pode ser que a configuração padrão do sistema limpe automaticamente o diretório de arquivos temporários que não foi operado por um período de tempo, o que torna impossível consultar o diretório de arquivos temporários durante o upload.

Os sistemas CentOS6 e inferiores (incluindo) usam watchtmp + cron para obter o efeito de limpar regularmente arquivos temporários.Isso mudou no CentOS7.No CentOS7, o sistema usa systemd para gerenciar arquivos variáveis ​​e temporários, e existem 3 serviços de sistema relacionados. :

systemd-tmpfiles-setup.service: criar arquivos e diretórios voláteis
systemd-tmpfiles-setup-dev.service: criar nós de dispositivos estáticos em / dev
systemd-tmpfiles-clean.service: limpeza de diretórios temporários

Também existem três locais relacionados aos arquivos de configuração:
/etc/tmpfiles.d/ .conf
/run/tmpfiles.d/
.conf
/usr/lib/tmpfiles.d/*.conf
/ tmp As regras de limpeza de diretório dependem principalmente de / usr configurações do arquivo /lib/tmpfiles.d/tmp.conf, o conteúdo da configuração padrão é:


#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d           #   清理/tmp下10天前的目录和文件
v /var/tmp 1777 root root 30d       #   清理/var/tmp下30天前的目录和文件

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp


Existem quatro soluções :
1. Reinicie o projeto e gere automaticamente o diretório de arquivos temporários novamente, mas se o diretório de arquivos temporários não for operado por um período de tempo, o problema poderá ocorrer novamente.
2. Configure o local do diretório de arquivo temporário para solicitações de várias partes (dados do formulário), não em / tmp.


@Configuration
public class MultipartConfig {
    /**
     * 文件上传临时路径
     */
    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        String location = System.getProperty("user.dir") + "/data/tmp";
        File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }
}

3. Crie manualmente o diretório correspondente no servidor.
4. Adicione a configuração do sistema para que o sistema não apague automaticamente o diretório de arquivos temporários no tomcat. * Formato.
x /tmp/tomcat.* pode ser adicionado ao arquivo acima.

Publicado 24 artigos originais · elogiado 0 · visitas 109

Acho que você gosta

Origin blog.csdn.net/jiangxiayouyu/article/details/105606760
Recomendado
Clasificación