java文件日志功能_JAVA文件下载功能问题解决日志
今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了。
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文件下载功能问题解决日志相关推荐
- java 文件分割器_Java分割器
java 文件分割器 Java Spliterator is one of the four iterators – Enumeration, Iterator, ListIterator and S ...
- java 文件引用路径_JAVA项目引用文件路径问题
比如我们有以下目录 |--project |--src |--javaapplication |--Test.java |--file1.txt |--file2.txt |--build |--ja ...
- java文件操作和_JAVA文件操作类和文件夹的操作
JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...
- java文件不能运行_java文件不能运行怎么办?
java文件不能运行怎么办? java文件不能运行的解决办法: 1.安装好Java虚拟机后,打开桌面上"我的电脑",点击菜单"工具"→"文件夹选项&q ...
- java文件路径转义_java文件路径中“\”和“/”的区别
java文件路径中"\"和"/"的区别 发布时间:2020-06-25 17:51:22 来源:亿速云 阅读:189 作者:Leah 本篇文章为大家展示了jav ...
- java 文件 加解密_Java实现文件的加密解密功能示例
Java实现文件的加密解密功能示例 发布时间:2020-10-05 22:05:15 来源:脚本之家 阅读:86 作者:FC WORLD!!! 本文实例讲述了Java实现文件的加密解密功能分享给大家供 ...
- java 文件存储 搜索_Java并发(Runnable+Thread)实现硬盘文件搜索功能
零.插播2020CSDN博客之星投票新闻 近日(1月11日-1月24日),2020CSDN博客之星评选正在火热进行中,作为码龄1年的小白有幸入选Top 200,首先很感谢CSDN官方把我选上,本来以为 ...
- java实现图片对比功能_Java 照片对比功能的实现
package com.function; import java.awt.image.BufferedImage; import java.io.BufferedWriter; import jav ...
- java文件定时读写_java定时任务及日志的使用
需要引入日志的两个架包: log4j.jar和commons-logging.jar package com.lzl; import java.util.TimerTask; import org.a ...
最新文章
- CSS 文字,边框实现从左至右颜色渐变
- Apache服务器和tomcat服务器有什么区别?
- jQuery教程(十三)jQuery Lightbox (插件)
- Linux配置脚本导出运行,linux服务器部署jar包以及shell脚本的书写
- coreData数据操作
- JavaScript从入门到放弃 -(五)函数进阶(高级用法)
- java程序的运行方式
- zabbix3.4+grafana5.0.1数据可视化
- i++,++i 作为参数
- Document.getElement方法
- 【翻译】CRAFT:Character Region Awareness for Text Detection
- Android IntentService deprecated|笔记
- 2019依图科技笔试题
- python实现简易搜索引擎(含代码)
- 快手算法岗日常实习面试经验
- 雷军:编程不仅仅是技能,更是一种艺术!
- 卡数字怀念的东西:魔方
- 手机chrome没有声音_Chrome浏览器没有声音,解决windows10Chrome浏览器没有声音的问题...
- 国产智多晶FPGA基于Verilog的设计开发流程
- 10-252 B1-6统计客户的订单信息
热门文章
- vue 自定义marquee无缝滚动组件
- FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;...
- 一次MySQL死锁问题解决
- SecureCRT密钥key远连接程ssh证书登录Linux
- 邻接矩阵有向图的介绍
- checkbox 在火狐的不支持
- 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(3)--你的SP版本...
- Oracle和Mysql中的字符串的拼接
- Springboot2.x使用redis作为缓存
- CompletionService VS ExecutorService