@Override
public void download(Long id, HttpServletResponse response) {
Response responseFe;
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
ResourceArea resourceArea = super.getById(id);
String downloadName = "压缩包" + resourceArea.getAreaTitle() + ".zip";
ZipOutputStream zipOutputStream = null;
DataOutputStream os = null;
try {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(downloadName, "utf-8"));
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipOutputStream.setMethod(ZipOutputStream.DEFLATED);
ResourceAreaVo areaVo = new ResourceAreaVo();
areaVo.setDelFlag("0");
areaVo.setCommitFlag(2L);
areaVo.setShelfStatus(1L);
areaVo.setParentId(id);
List<ResourceAreaVo> areaVoList = resourceAreaMapper.selectResourceAreaList(areaVo);
if(StringUtils.isNotEmpty(areaVoList)){
ResourceProduct resourceProduct = new ResourceProduct();
resourceProduct.setDelFlag("0");
resourceProduct.setProductState(2);
for (ResourceAreaVo resourceAreaVo : areaVoList) {
resourceProduct.setBusinessId(resourceAreaVo.getId());
List<ResourceProduct> projectlist = resourceProductService.selectResourceProductList(resourceProduct);
for (ResourceProduct product : projectlist) {
List<FileMessageVo> byProductId = resourceFilemessageService.getByProductId(product.getId());
for (FileMessageVo fileMessageVo : byProductId) {
try {
responseFe = minioServiceClient.downLoad(oauthUtil.getToken(), fileMessageVo.getFileId());
addToZipFile(resourceAreaVo.getAreaTitle(),fileMessageVo.getFileName(), zipOutputStream, os, responseFe);
} catch (Exception e) {
log.error("下载文件出错![{}]"+e.getMessage());
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.flush();
os.close();
}
if (zipOutputStream != null) {
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void addToZipFile(String folderName,String fileName, ZipOutputStream zipOutputStream,DataOutputStream os,Response response) throws IOException {
ZipEntry entry = new ZipEntry(folderName+"/"+fileName);
zipOutputStream.putNextEntry(entry);
os = new DataOutputStream(zipOutputStream);
InputStream inputStream = response.body().asInputStream();
byte[] b = new byte[100];
int length;
while ((length = inputStream.read(b)) != -1) {
os.write(b, 0, length);
}
inputStream.close();
zipOutputStream.closeEntry();
}