Rumah >Java >javaTutorial >Bagaimana untuk menyelesaikan masalah bahawa direktori sementara untuk muat naik fail SpringBoot tidak dapat ditemui

Bagaimana untuk menyelesaikan masalah bahawa direktori sementara untuk muat naik fail SpringBoot tidak dapat ditemui

王林
王林ke hadapan
2023-05-15 15:22:221973semak imbas

Masalah direktori sementara muat naik fail SpringBoot

Saya percaya semua orang akan menghadapi masalah seperti itu apabila menggunakan projek ke pelayan:

org.springframework.web.multipart. Tidak dapat menghuraikan servlet berbilang bahagian
permintaan;pengecualian bersarang ialah java.io.IOException: Lokasi muat naik sementara
[/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] tidak sah
springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipart
HttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest juga lama, saya mencari dalam talian dan tidak dapat mencari penyelesaian Satu-satunya adalah untuk menentukan direktori sementara kepada pelayan dan ia akan menjadi ok, ini adalah kod.

1. Bahagian hadapan mesti dimuat naik dengan komponen springMvc berbilang bahagian/formulir

2. Hanya rujuk pada kod latar belakang di sini. Fail ke pelayan awanBagaimana untuk menyelesaikan masalah bahawa direktori sementara untuk muat naik fail SpringBoot tidak dapat ditemui

Untuk alat muat naik fail, sila rujuk artikel ini

//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");
    }
}

di mana/ usr/fjl/file Ia adalah alamat laluan pelayan

3. Maka inilah masalahnya sekarang ini tidak dapat menyelesaikan masalah muat naik > (konfigurasi kunci) Tambah konfigurasi baharu: Kod ini sangat kritikal Ini ialah alamat sementara yang menentukan laluan muat naik sementara (ralat juga akan dilaporkan secara setempat) Bagaimana untuk menyelesaikan masalah bahawa direktori sementara untuk muat naik fail SpringBoot tidak dapat ditemui

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

Hanya tambah ini dan fail boleh. berjaya dimuat naik. Jika ia merentas domain, anda juga boleh mendapatkan konfigurasi dan konfigurasi kod dalam nginx .

SpringBoot menukar direktori sementara fail yang dimuat naik

@Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setLocation(tmepPath);
        return factory.createMultipartConfig();
    }

dan menambahkan kod di atas ke Application.java.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa direktori sementara untuk muat naik fail SpringBoot tidak dapat ditemui. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam