用先生成本地文件,再上传数据给用户下载的方法,得到zip包的问题

用先生成本地文件,再上传数据给用户下载的方法,得到zip包的问题

第一种方法:“不着地”方法,即不在本地保存文件,直接给用户下载的方法,用户得到的是excel.xlsx文件

第二种方法:先生成文件,再给用户下载的方法,用户得到的是一个压缩包,名字是exportExcel.zip。但是解压后内容就很奇怪。

http://img1.sycdn.imooc.com//climg/5c4ea13100014ec304570062.jpg

http://img1.sycdn.imooc.com//climg/5c4ea0da0001d67f10470770.jpg

//第二种方法
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回答

你是想问第二种方法下载下来的为啥是zip吗?以及zip的名字吗?

不是特别明白你的疑问点是什么

我个人觉得是因为第一种方法设置了response.setHeader()

  response.setHeader("Content-Disposition","attachment;filename=export.xlsx"); 

filename=export.xlsx 就设置了文件的名字



  • 蜜蜂仔 提问者 #1
    是我用第二种方法后,打开zip后没有excel文件,而是一堆文件,所以觉得奇怪
    2019-01-28 22:10:15
  • 慕布斯37364 回复 提问者 蜜蜂仔 #2
    https://zhidao.baidu.com/question/529463244.html 你看看这篇文章,换种方式打开试试呢?
    2019-01-29 09:59:02
  • 蜜蜂仔 提问者 回复 慕布斯37364 #3
    用这方法修改打开方式后可以正常显示
    2019-01-31 14:23:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师