如何上传文件并解压

上传单个zip文件到后端并解压后保存

1.Controller



/**
 * 保存目录
 */
@Value("${file.upload}")
private String catalog;

@RestController
@RequestMapping("/upload")
public List<File> upload(MultipartFile file) throws IOException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
         // 在 uploadPath 文件夹中通过日期对上传的文件归类保存
     // 比如:/2021/03/11
        String format = sdf.format(new Date());
//  new File("").getCanonicalPath()获取本地项目路径,加上保存目录路径
        String path = new File("").getCanonicalPath()+catalog;
// 路径加上日期作为一个目录 
File folder = new File(path + format);
// 不是一个目录的时候
        if (!folder.isDirectory()) {
            //建立一个子目录
            folder.mkdirs();
        }
//  文件保存路径和保存的文件名
        File filePath= new File(folder,file.getOriginalFilename());
        try {
            // 文件保存
            file.transferTo(filePath);
        } catch (IOException e) {
            log.error("压缩包保存失败", e);
        }

        //解压
        List<File> _list = new ArrayList<>() ;
        try {
            ZipFile _zipFile = new ZipFile(filePath , "GBK") ;
            for(Enumeration entries = _zipFile.getEntries(); entries.hasMoreElements() ; ){
                ZipEntry entry = (ZipEntry)entries.nextElement() ;
                File _file = new File(folder.getPath() + File.separator + entry.getName()) ;
                if( entry.isDirectory() ){
                    _file.mkdirs() ;
                }else{
                    File _parent = _file.getParentFile() ;
                    if( !_parent.exists() ){
                        _parent.mkdirs() ;
                    }
                    InputStream _in = _zipFile.getInputStream((ZipArchiveEntry) entry);
                    OutputStream _out = new FileOutputStream(_file) ;
                    int len = 0 ;
                    byte[] _byte = new byte[1024];
                    while( (len = _in.read(_byte)) > 0){
                        _out.write(_byte, 0, len);
                    }
                    _in.close();
                    _out.flush();
                    _out.close();
                    _list.add(_file) ;
                }
            }
        } catch (IOException e) {
            log.error("解压失败", e);
        }
        // 删除压缩包
        filePath.delete();
        // 返回文件保存路径
        return _list;
    }
}



2.yml配置


spring:
  servlet:
    multipart:  #设置上传文件大小
      max-file-size: 800MB
      max-request-size: 800MB
file: 
  upload: \\enroll-data-deal\\enroll-data-deal-application\\src\\main\\resources\\upload\\




其实保存文件就两步(file.getOriginalFilename()文件名,获取文件保存路径,file转移到transferTo路径path)这种方式是上传到本地文件夹

File path = new File("D:\\Web\\"+ file.getOriginalFilename());

System.out.println(path); // D:\Web\一分一段导入模板.xls

file.transferTo(path);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值