办公设备租赁-深圳惠源
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、代码
@Data
@AllArgsConstructor
public class FileItem {private File file;
private String fileName;
private String businessType;
private String suffix;
}
public static void downloadZip(List<FileItem> files, OutputStream outputStream) {
ZipOutputStream zipOutStream = null;
try {
//-- 包装成ZIP格式输出流
zipOutStream = new ZipOutputStream(new BufferedOutputStream(outputStream));
// -- 设置压缩方法
zipOutStream.setMethod(ZipOutputStream.DEFLATED);
//-- 将多文件循环写入压缩包
for (int i = 0; i < files.size(); i++) {
File file = files.get(i).getFile();
FileInputStream filenputStream = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
filenputStream.read(data);
//-- 添加ZipEntry,并ZipEntry中写入文件流,这里,需要防止下载的文件有重名的导致下载失败
zipOutStream.putNextEntry(new ZipEntry(files.get(i).getFileName()));
zipOutStream.write(data);
filenputStream.close();
zipOutStream.closeEntry();
}
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
try {
if (Objects.nonNull(zipOutStream)) {
zipOutStream.flush();
zipOutStream.close();
}
if (Objects.nonNull(outputStream)) {
outputStream.flush();
}
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage());;
}
}
}
二、下载失败-排查
下载后发现文件打不开,报格式错误
1.文件保存到本地
一开始以为是文件问题,后来发现文件保存到本地可以打开,排除
2.PostMan调试接口
以为是流关闭或着流处理有问题,postMan调用后发现下载的文件也可以打开,证明后端接口没有问题,是前端接受方式有错误,前端调整后既可下载成功。