今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了。

1、首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的controller方法中添加了下载的方法,type和async两个参数的四种组合都不行,弃用ajax,用window.location.href='file/download?path='+file;重新发一个新的下载请求之后,保存对话框终于弹出。

2、弹出之后,发现文件名乱码,后台的解决方案代码如下:

private static final String CHARSET = "utf-8";

String agent = request.getHeader("User-Agent").toLowerCase();if (agent != null && (agent.indexOf("msie") != -1 ||(agent.indexOf("rv") != -1 && agent.indexOf("firefox") == -1))) {

fileName= URLEncoder.encode(file.getName(), "UTF-8");

}else{

fileName= new String(file.getName().getBytes(CHARSET), "ISO8859-1");

}

3、后台一直在报错getWriter() has already been called for this response,通过报错内容大概可以看出ServletOutputStream out = response.getOutputStream();这个应该是个单例的,但是又没有发现别的地方在调用这个方法获取输出流,仔细测试发现,每次把所有的请求全部关闭之后,第一次不会出问题,之后再请求就会报错,把后面的out.close();注释掉,报错就解决了。

4、前台拼文件路径的方法

varfile;var path = $("#lujing").val();if(path.lastIndexOf('\\')!=path.length-1){//console.info("不以斜杠结尾");

file = $("#lujing").val() + "\\" + $("#city").val() + "市" + $("#year1").val()+ $("#month1").val() + "电商数据分析报告.doc";

}else{//console.info("以斜杠结尾");

file = $("#lujing").val() + $("#city").val() + "市" + $("#year1").val()+ $("#month1").val() + "电商数据分析报告.doc";

}

window.location.href='file/download?path='+file;

5、导出controller

importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.net.URLEncoder;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpServletRequest;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;/***@author作者 Jeffy

*@version**/@Controllerpublic classFileController{//Spring这里是通过实现ServletContextAware接口来注入ServletContext对象

private static final String CHARSET = "utf-8";

@RequestMapping("/exportreport/file/download")public static voidfileDownload(HttpServletResponse response, HttpServletRequest request,

String path)throwsUnsupportedEncodingException{

File file= newFile(path);

String fileName;

String agent= request.getHeader("User-Agent").toLowerCase();if (agent != null && (agent.indexOf("msie") != -1 ||(agent.indexOf("rv") != -1 && agent.indexOf("firefox") == -1))) {

fileName= URLEncoder.encode(file.getName(), "UTF-8");

}else{

fileName= new String(file.getName().getBytes(CHARSET), "ISO8859-1");

}//response.reset();//非常重要//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型

response.setContentType("multipart/form-data");

response.setContentType("application/OCTET-STREAM;charset=UTF-8");//2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)

response.setHeader("Content-Disposition", "attachment;fileName="+fileName);

ServletOutputStream out;try{

FileInputStream inputStream= newFileInputStream(file);//3.通过response获取ServletOutputStream对象(out)

out =response.getOutputStream();int b = 0;byte[] buffer = new byte[512];while ((b = inputStream.read(buffer)) != -1){//4.写到输出流(out)中

out.write(buffer,0,b);

}

inputStream.close();//out.close();//out.flush();

}catch(IOException e) {

e.printStackTrace();

}

}

}

以上便是遇到的java文件下载功能全部问题,可能还有暂时没有测试出的问题,后续发现问题及时更新,也请大家多多批评指正。

java文件日志功能_JAVA文件下载功能问题解决日志相关推荐

  1. java 文件分割器_Java分割器

    java 文件分割器 Java Spliterator is one of the four iterators – Enumeration, Iterator, ListIterator and S ...

  2. java 文件引用路径_JAVA项目引用文件路径问题

    比如我们有以下目录 |--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--ja ...

  3. java文件操作和_JAVA文件操作类和文件夹的操作

    JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...

  4. java文件不能运行_java文件不能运行怎么办?

    java文件不能运行怎么办? java文件不能运行的解决办法: 1.安装好Java虚拟机后,打开桌面上"我的电脑",点击菜单"工具"→"文件夹选项&q ...

  5. java文件路径转义_java文件路径中“\”和“/”的区别

    java文件路径中"\"和"/"的区别 发布时间:2020-06-25 17:51:22 来源:亿速云 阅读:189 作者:Leah 本篇文章为大家展示了jav ...

  6. java 文件 加解密_Java实现文件的加密解密功能示例

    Java实现文件的加密解密功能示例 发布时间:2020-10-05 22:05:15 来源:脚本之家 阅读:86 作者:FC WORLD!!! 本文实例讲述了Java实现文件的加密解密功能分享给大家供 ...

  7. java 文件存储 搜索_Java并发(Runnable+Thread)实现硬盘文件搜索功能

    零.插播2020CSDN博客之星投票新闻 近日(1月11日-1月24日),2020CSDN博客之星评选正在火热进行中,作为码龄1年的小白有幸入选Top 200,首先很感谢CSDN官方把我选上,本来以为 ...

  8. java实现图片对比功能_Java 照片对比功能的实现

    package com.function; import java.awt.image.BufferedImage; import java.io.BufferedWriter; import jav ...

  9. java文件定时读写_java定时任务及日志的使用

    需要引入日志的两个架包: log4j.jar和commons-logging.jar package com.lzl; import java.util.TimerTask; import org.a ...

最新文章

  1. CSS 文字,边框实现从左至右颜色渐变
  2. Apache服务器和tomcat服务器有什么区别?
  3. jQuery教程(十三)jQuery Lightbox (插件)
  4. Linux配置脚本导出运行,linux服务器部署jar包以及shell脚本的书写
  5. coreData数据操作
  6. JavaScript从入门到放弃 -(五)函数进阶(高级用法)
  7. java程序的运行方式
  8. zabbix3.4+grafana5.0.1数据可视化
  9. i++,++i 作为参数
  10. Document.getElement方法
  11. 【翻译】CRAFT:Character Region Awareness for Text Detection
  12. Android IntentService deprecated|笔记
  13. 2019依图科技笔试题
  14. python实现简易搜索引擎(含代码)
  15. 快手算法岗日常实习面试经验
  16. 雷军:编程不仅仅是技能,更是一种艺术!
  17. 卡数字怀念的东西:魔方
  18. 手机chrome没有声音_Chrome浏览器没有声音,解决windows10Chrome浏览器没有声音的问题...
  19. 国产智多晶FPGA基于Verilog的设计开发流程
  20. 10-252 B1-6统计客户的订单信息

热门文章

  1. vue 自定义marquee无缝滚动组件
  2. FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;...
  3. 一次MySQL死锁问题解决
  4. SecureCRT密钥key远连接程ssh证书登录Linux
  5. 邻接矩阵有向图的介绍
  6. checkbox 在火狐的不支持
  7. 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(3)--你的SP版本...
  8. Oracle和Mysql中的字符串的拼接
  9. Springboot2.x使用redis作为缓存
  10. CompletionService VS ExecutorService