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、前台拼文件路径的方法
var file;
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
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 作者 Jeffy
* @version
*
*/
@Controller
public class FileController{
//Spring这里是通过实现ServletContextAware接口来注入ServletContext对象 private static final String CHARSET = "utf-8";
@RequestMapping("/exportreport/file/download")
public static void fileDownload(HttpServletResponse response, HttpServletRequest request,
String path) throws UnsupportedEncodingException{ File file = new File(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 = new FileInputStream(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 文件下载功能 解决中文乱码
Html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- JAVA 文件下载乱码问题解决办法
页面设置隐藏的iframe <iframe id='reqFrame' frameborder='0' style='display:none' allowtransparency='true' ...
- Atitit php java python nodejs错误日志功能的比较
Atitit php java python nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...
- java web文件下载功能实现 (转)
http://blog.csdn.net/longshengguoji/article/details/39433307 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一 ...
- 【Servlet】java web 文件下载功能实现
需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...
- 【java】java自带的java.util.logging.Logger日志功能
偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...
- Java 文件句柄泄露问题解决小记(转)
转:Java 文件句柄泄露问题解决小记 维护 WebIDE 免不了要管理很多的文件, 自从我们线上系统增加了资源回收功能,便一直受一个问题困扰:后台线程解绑目录时偶尔报错,看症状因为是某些文件被占用了 ...
- 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题
问题描述: 在springmvc中实现文件下载功能一般都会使用javax.servlet.ServletOutputStream out = response.getOutputStream();封装 ...
- Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB
Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...
随机推荐
- 黑马程序员——C语言基础 内存剖析
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)进制 进制是一种计数的方式,数值的表示形式.有多种进制十进制.二进制 ...
- XCode6.0的iOS免证书真机测试方法(MAC及黑苹果均有效)[转]
目前在XCode上开发的iOS程序只能在模拟器Simulator中运行,如果要放到真机上测试,需要苹果官方认证的开发者账号,购买开发者证书iDP,99美金一年啊!!! 作为刚开始学习iOS编程的菜鸟, ...
- Codeforces Round #323 (Div. 1) A. GCD Table
A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 修改(table的section与上一个section的间距)section header背景颜色
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView * ...
- 堆糖瀑布流完整解决方案(jQuery)
2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...
- linux下打包工具
InstallAnyWhere IzPack InstallJammer; installshield 也支持rpm打包 Advanced Installer
- Python的平凡之路(18)
一.JS 正则部分 test - 判断字符串是否符合规定的正则rep = /\d+/;rep.test("asdfoiklfasdf89asdfasdf")# truerep ...
- jQuery lazyload 懒加载
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
- 【zz】matlab 腐蚀膨胀算法
1.图像膨胀的Matlab实现: 可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象.结构元素对象可以是strel函数返回的对象,也可 ...
- .NET3.5项目转.NET2.0项目技巧
最近有一个项目,一开始开发是用VS2008(.NET3.5)开发的,该项目是一个Windorm客户端软件,由于在大规模的推广过程中,发现在安装.NET3.5Framework的时候浪费了太多时间,而且 ...