一、单文件流的携带回传
要求:HttpServletResponse response、字节流byte[]数据
我这里只是简单演示一下,其中FileCopyUtils是Spring框架自带的工具类,有兴趣的可以去看看:https://blog.csdn.net/superdog007/article/details/16897541
import org.springframework.util.FileCopyUtils;
public void test(HttpServletResponse response) {
String string = "中国加油";
byte[] os = string.getBytes();
if (ArrayUtils.isNotEmpty(os)) {
response.setContentType("application/pdf;charset=UTF-8");
try {
FileCopyUtils.copy(os,response.getOutputStream());
} catch (Exception e) {
log.error("操作失败",e);
}
}
}
二、多文件流的携带回传
因为response是单次响应的,往往就是文件流回传第一个后,系统框架会为我们自动关闭。所以多文件流的回传,我是直接压缩成zip流之后在回传。代码如下:
public void test(HttpServletResponse response) {
String[] splitContractIds = ["1","2","3"];
try {
// 获取zip流
ZipOutputStream zipOutputStream=new ZipOutputStream(response.getOutputStream());
// 设置响应类型和字符集
response.setContentType("application/zip;charset=UTF-8");
for (String splitContractId : splitContractIds) {
byte[] os = splitContractId.getBytes() ;
if (ArrayUtils.isNotEmpty(os)) {
try {
// 设置pdf文件的名称
ZipEntry zipEntry=new ZipEntry(splitContractId+".PDF");
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.write(os);
} catch (IOException e) {
log.error("操作失败",e);
}
}
}
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
关于多文件流的回传,也可以参考下面的文章:
1、https://blog.csdn.net/weixin_42213545/article/details/82712327
2、https://blog.csdn.net/qq_44111464/article/details/106996998
3、https://blog.csdn.net/lkr_lkr/article/details/104599901