用先生成本地文件,再上传数据给用户下载的方法,得到zip包的问题
第一种方法:“不着地”方法,即不在本地保存文件,直接给用户下载的方法,用户得到的是excel.xlsx文件
第二种方法:先生成文件,再给用户下载的方法,用户得到的是一个压缩包,名字是exportExcel.zip。但是解压后内容就很奇怪。


//第二种方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ExcelService service = new ExcelService();
Workbook workbook = service.export(true);
//创建输出流,把workbook对象写入输出流中
FileOutputStream fileOutputStream = new FileOutputStream("d:/upload/excel.xlsx");
workbook.write(fileOutputStream);
//创建输入流,用fileinputstream读取文件,用byte存储输入流,再用outputstream输出byte
ServletOutputStream outputStream = response.getOutputStream();
FileInputStream fileInputStream = new FileInputStream("d:/upload/excel.xlsx");
byte[] bytes =new byte[fileInputStream.available()];
//fileInputStream把文件读取到bytes中,即本地文件到程序内存中,最后才可以用程序内存的数据传给响应response
fileInputStream.read(bytes);
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
fileInputStream.close();
fileOutputStream.close();
workbook.close();
}
//第一种方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ExcelService service = new ExcelService();
Workbook workbook = service.export(true);
response.setHeader("Content-Disposition","attachment;filename=export.xlsx");
ServletOutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
}不同方法得到的文件,名称也不一样~
1
收起
正在回答
1回答
你是想问第二种方法下载下来的为啥是zip吗?以及zip的名字吗?
不是特别明白你的疑问点是什么
我个人觉得是因为第一种方法设置了response.setHeader()
response.setHeader("Content-Disposition","attachment;filename=export.xlsx");
filename=export.xlsx 就设置了文件的名字
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星