springboot项目,后端集成上传upload文件(zip并解压到指定路径中)

springboot项目,后端集成上传zip文件,并解压到指定的文件中

上传

	@PostMapping(value = "/upload")
	public JsonResponse upload(@RequestParam(value="id",required=true) String id, @RequestParam(required = false) MultipartFile file) {
		try {
			System.out.println("upload start = " + System.currentTimeMillis());
			String videoUrl = uploadFile(file,id);
			System.out.println("upload end = " + System.currentTimeMillis());
			return okJson(videoUrl);
		} catch (Exception e) {
			e.printStackTrace();
			return errorJson("文件上传失败!");
		}
	}
	
	@Value("${jeecg.path.uploadFile}") //获取配置文件上传路径
	private String uploadFileURL; 
	
	public String uploadFile(MultipartFile file,String id) throws Exception {
		Integer batch = 1; //文件版本号
		ThreeDimensionRoom room = roomService.selectBatchById(id);
		if (!org.springframework.util.StringUtils.isEmpty(room)) {
			batch+=room.getBatch();
		}
		roomService.updateBatchById(id, batch);
		String shortPath =  file.getOriginalFilename();
		File dest = new File(uploadFileURL+"//upFile//"+id+"//"+batch, shortPath);
		if (!dest.getParentFile().exists()) {
			boolean rel = dest.getParentFile().mkdirs();
			if (!rel) {
				throw new JeecgBootException("文件夹创建失败");
			}
		}
		InputStream is = file.getInputStream();
		OutputStream os = new FileOutputStream(dest);
		try {
			byte[] buffer = new byte[8 * 1024];
			int bytesRead;
			while ((bytesRead = is.read(buffer)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
		} catch (Exception e) {
			return errorJson("上传失败!");
		} finally {
			is.close();
		 	os.close();
		}
		return shortPath;
	}

解压

public JsonResponse unZipFiles(@RequestParam(value="id",required=true) String id) {
		try {
			Integer batch = 1;
			ThreeDimensionRoom room = roomService.selectBatchById(id);
			if (!org.springframework.util.StringUtils.isEmpty(room)) {
				batch=room.getBatch();
			}
			File zipFile = new File(uploadFileURL+"//upFile//"+id+"//"+batch +"//machineRoom.zip");
			String path = uploadFileURL+"//unzipFile//"+id+"//"+batch +"//"; //解压到指定的文件夹目录
			unZipFiles(zipFile, path);
			return okJson();
		} catch (Exception e) {
			e.printStackTrace();
			return errorJson("找不到对应的文件,解压失败!");
		}
	}

	//解压文件到指定目录
    @SuppressWarnings("rawtypes")
    public static void unZipFiles(File zipFile,String descDir) throws IOException {
        File pathFile = new File(descDir);
        if(!pathFile.exists()) {
            pathFile.mkdirs();
        }
        //解决zip文件中有中文目录或者中文文件
        ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
        for(Enumeration entries = zip.entries(); entries.hasMoreElements();) {
            ZipEntry entry = (ZipEntry)entries.nextElement();
            String zipEntryName = entry.getName();
            InputStream in = zip.getInputStream(entry);
            String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
            //判断路径是否存在,不存在则创建文件路径
            File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
            if(!file.exists()) {
                file.mkdirs();
            }
            //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
            if(new File(outPath).isDirectory()) {
                continue;
            }
            //输出文件路径信息
//            System.out.println(outPath);
            OutputStream out = new FileOutputStream(outPath);
            byte[] buf1 = new byte[1024];
            int len;
            while((len=in.read(buf1))>0) {
                out.write(buf1,0,len);
            }
            in.close();
            out.close();
        }
        zip.close();
        System.out.println("******************解压完毕********************");
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值