先说原因:outputStream.write()方法写在了response.setHeader()前面。write方法后页面直接开始下载,导致请求头设置没起作用。
输出流传输文件
背景:使用HttpServletResponse读取本地android安装包(.apk)文件,输出为 .zip文件,文件名为接口名。
代码简写如下:
//HttpServletResponse response;
OutputStream outputStream = response.getOutputStream();
byte[] data = new byte[xxx];
//data赋值
outputStream.write(data);
response.setHeader("Content-Disposition","attachment;filename=android.apk");
response.setContentType("application/vnd.android.package-archive");
...
解决:通过debug发现执行到 outputStream.write(data); 页面就已经开始下载包了。
解决方式就是设置为respons的其他属性后在写outputStream.write(data);
即:
//HttpServletResponse response;
OutputStream outputStream = response.getOutputStream();
byte[] data = new byte[xxx];
//data赋值
//respons属性设置
response.setHeader("Content-Disposition","attachment;filename=android.apk");
response.setContentType("application/vnd.android.package-archive");
//写入输出流
outputStream.write(data);
...