Maison > Java > javaDidacticiel > le corps du texte

Comment résoudre le problème selon lequel le répertoire temporaire pour le téléchargement du fichier SpringBoot est introuvable

王林
Libérer: 2023-05-15 15:22:22
avant
1955 Les gens l'ont consulté

Problème de répertoire temporaire de téléchargement du fichier SpringBoot

Je pense que tout le monde rencontrera un tel problème lors du déploiement du projet sur le serveur :

org.springframework.web.multipart.MultipartException : Impossible d'analyser la servlet multipart
request ; l'exception imbriquée est Java .io.IOException : l'emplacement de téléchargement temporaire
[/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] n'est pas valide
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipart
HttpServletRequest. java : 112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.

Ce problème m'a intrigué pendant longtemps. J'ai cherché en ligne et je n'ai pas trouvé de solution. La seule solution est de spécifier un répertoire temporaire sur le serveur. .Pas de bêtises.

1. Le frontend doit être téléchargé avec le composant springMvc multipart/form-data

Comment résoudre le problème selon lequel le répertoire temporaire pour le téléchargement du fichier SpringBoot est introuvable

2. J'utilise SFTP pour télécharger des fichiers sur le serveur cloud, veuillez. reportez-vous à cet article

//www.jb51.net/article/216456.htm

@Log("文件上传")
@ResponseBody
@PostMapping("/upload")
@RequiresPermissions("common:companyremittance:upload")
R upload(@RequestParam("file") MultipartFile file,@RequestParam("arrys") String arrys, @RequestParam("commpanyname") 
        String  commpanyname,@RequestParam("remittancedate") String  remittancedate,HttpServletRequest request) throws ParseException, IOException {

    //先上传到图片服务器上面然后在读取信息
    int prostatusId=0;
    if(StringUtils.isEmpty(arrys)){
        return R.error("导入失败");
    }

    String oldName = file.getOriginalFilename();
    //使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀
    String newName = IDUtils.genImageName();
    newName = newName + oldName.substring(oldName.lastIndexOf("."));
    SftpUtils ft = new SftpUtils();
    //通过SFtoInfo  参数连接传入参数即可
    Session s = ft.getSession(SFTPInfo.SFTP_REQ_HOST,SFTPInfo.SFTP_DEFAULT_PORT, SFTPInfo.SFTP_REQ_USERNAME,SFTPInfo.SFTP_REQ_PASSWORD);
    Channel channel = ft.getChannel(s);
    ChannelSftp sftp = (ChannelSftp)channel;
    Boolean upload = ft.uploadFile(sftp,SFTPInfo.basePath, file.getInputStream(),newName);
    SaveDO saveDO=new SaveDO();
    if(upload){
        //上传成功关闭信息
        saveDO.setFileurl(SFTPInfo.baseUrl+ "/" + newName);
        saveDO.setFilename(oldName);
        saveDO.setFilesize(String.valueOf(file.getSize()));
        saveDO.setImportdate(new Date());
        saveDO.setIpaddr(IPUtils.getIpAddr(request));
        saveDO.setUsername(ShiroUtils.getUser().getUsername());
        saveDO.setSftpupurl("/usr/fjl/file");  //这里是文件路径上传服务器里面路径 记得chomd  777

        saveDO.setNewfilename(newName);
        saveService.save(saveDO);
        //根据proentId查询项目的状态
        CompanyremittanceDO companyremittanceDO1=new CompanyremittanceDO();
        companyremittanceDO1.setProparentid(Long.valueOf(arrys));
        CompanyremittanceDO aDo = companyremittanceService.getProjectStatus(arrys);
        if (aDo != null) {
            companyremittanceDO1.setProstatus(aDo.getProstatus());
        } else {
            //自增状态++1
            prostatusId = companyremittanceService.getMaxProStatus();
            prostatusId++;
            companyremittanceDO1.setProstatus(prostatusId);
        }
        companyremittanceDO1.setRemittancename(commpanyname);
        companyremittanceDO1.setRemittancedate(getDate(remittancedate));
        String fileName = file.getOriginalFilename();
        fileName = FileUtil.renameToUUID(fileName);
        try {
            boolean flag=  ExcelUtil.batchImport(fileName,file,companyremittanceService,companyremittanceDO1);
            if(flag){
              if(ft.delete(saveDO.getSftpupurl(),saveDO.getNewfilename(),sftp)){
                  ft.closeAll(sftp, channel, s); //关闭连接
               return    R.ok("导入成功");
              }else{
                  return R.ok("数据导入成功!服务器数据文件没有删除!");
              }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return R.error();
        }
        return R.error();
    }else {
        return R.error("上传error");
    }
}
Copier après la connexion

où/usr/fjl/file est l'adresse du chemin du serveur

Comment résoudre le problème selon lequel le répertoire temporaire pour le téléchargement du fichier SpringBoot est introuvable3 Alors le problème est là maintenant. cela ne résoudra certainement pas le problème de téléchargement

(Configuration des clés) Ajoutez une nouvelle configuration : ce code est très critique. Il s'agit de l'adresse temporaire qui spécifie le chemin de téléchargement temporaire (une erreur sera également signalée localement)

@Bean
MultipartConfigElement multipartConfigElement() {
   MultipartConfigFactory factory = new MultipartConfigFactory();
   //factory.setLocation("D:/tmp"); 本地用
      factory.setLocation("/home/temp"); //服务器用
   return factory.createMultipartConfig();
}
Copier après la connexion

Ajoutez simplement. ceci et le fichier peuvent être téléchargés avec succès. S'il est inter-domaine, il obtiendra toujours la configuration et la configuration du code dans nginx.

SpringBoot modifie le répertoire temporaire des fichiers téléchargés

@Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setLocation(tmepPath);
        return factory.createMultipartConfig();
    }
Copier après la connexion

Ajoutez le code ci-dessus dans Application.java.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal