Heim > Java > javaLernprogramm > So lösen Sie das Problem, dass das temporäre Verzeichnis für den SpringBoot-Datei-Upload nicht gefunden werden kann

So lösen Sie das Problem, dass das temporäre Verzeichnis für den SpringBoot-Datei-Upload nicht gefunden werden kann

王林
Freigeben: 2023-05-15 15:22:22
nach vorne
2020 Leute haben es durchsucht

Problem beim Hochladen des temporären Verzeichnisses der SpringBoot-Datei

Ich glaube, dass bei der Bereitstellung des Projekts auf dem Server jeder auf ein solches Problem stoßen wird:

org.springframework.web.multipart.MultipartException: Multipart Servlet konnte nicht analysiert werden
request; verschachtelte Ausnahme ist Java .io.IOException: Der temporäre Upload-Speicherort
[/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] ist ungültig
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipart
HttpServletRequest. java: 112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.

Dieses Problem hat mich schon lange verwirrt. Die einzige Lösung besteht darin, ein temporäres Verzeichnis für den Server anzugeben . Erweitern Sie den Code.

1. Das Frontend muss mit der Multipart-/Formulardaten-SpringMvc-Komponente hochgeladen werden. Für das Datei-Upload-Tool verwende ich einfach SFTP Weitere Informationen finden Sie in diesem Artikel Dies wird das Upload-Problem definitiv nicht lösen

(Schlüsselkonfiguration) Fügen Sie eine neue Konfiguration hinzu: Dieser Code ist sehr kritisch. Dies ist die temporäre Adresse, die den temporären Upload-Pfad angibt (ein Fehler wird auch lokal gemeldet)So lösen Sie das Problem, dass das temporäre Verzeichnis für den SpringBoot-Datei-Upload nicht gefunden werden kann

@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");
    }
}
Nach dem Login kopieren

Einfach hinzufügen Dies und die Datei kann erfolgreich hochgeladen werden. Wenn sie domänenübergreifend ist, erhält sie weiterhin Konfiguration und Codekonfiguration in nginx.

SpringBoot ändert das temporäre Verzeichnis der hochgeladenen Dateien

@Bean
MultipartConfigElement multipartConfigElement() {
   MultipartConfigFactory factory = new MultipartConfigFactory();
   //factory.setLocation("D:/tmp"); 本地用
      factory.setLocation("/home/temp"); //服务器用
   return factory.createMultipartConfig();
}
Nach dem Login kopieren

Fügen Sie den obigen Code in Application.java hinzu.

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass das temporäre Verzeichnis für den SpringBoot-Datei-Upload nicht gefunden werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage