response.getOutputStream();这样抛出文件流

pashuidexin 2013-11-04 06:00:50
response.getOutputStream();这样抛出文件流提供下载功能的,但下载不成功,提示文件已损坏。求解决
...全文
16375 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pashuidexin 2013-11-05
  • 打赏
  • 举报
回复
引用 5 楼 archwuke1 的回复:

filename = rs.getString("filename").trim();
filesize = rs.getInt("filesize");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(filename.getBytes("gb2312"), "ISO8859-1") + "\";");
// //attachment --- 作为附件下载
response.addIntHeader("Content-Length", filesize);
byte[] fileBuffer = new byte[filesize];
InputStream iStream = rs.getBinaryStream("gdata");
iStream.read(fileBuffer, 0, filesize);
ServletOutputStream out = response.getOutputStream();
out.write(fileBuffer);
out.flush();
out.close();
我有个小下载功能是这样做的,文件是保存在数据库里的,当然之前我做测试的时候是放在本地的,都没有问题,部署了也可以,在ff和ie8,9下都没问题
可是我这个不要保存,想直接输出流让用户下载
archwuke1 2013-11-05
  • 打赏
  • 举报
回复

filename = rs.getString("filename").trim();
filesize = rs.getInt("filesize");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(filename.getBytes("gb2312"), "ISO8859-1") + "\";");
// //attachment --- 作为附件下载
response.addIntHeader("Content-Length", filesize);
byte[] fileBuffer = new byte[filesize];
InputStream iStream = rs.getBinaryStream("gdata");
iStream.read(fileBuffer, 0, filesize);
ServletOutputStream out = response.getOutputStream();
out.write(fileBuffer);
out.flush();
out.close();
我有个小下载功能是这样做的,文件是保存在数据库里的,当然之前我做测试的时候是放在本地的,都没有问题,部署了也可以,在ff和ie8,9下都没问题
pashuidexin 2013-11-05
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
1.是不是文件都写完了 2.是不是IE 下载禁用
本机测试没问题,部署了就会出现文件损坏。如果是没写完,那该怎么解决呢,求指教
tony4geek 2013-11-05
  • 打赏
  • 举报
回复
1.是不是文件都写完了 2.是不是IE 下载禁用
pashuidexin 2013-11-05
  • 打赏
  • 举报
回复
引用 1 楼 jdzms23 的回复:
我也在搞下载 也出问题了 我的是这样的
			 String fileName = result.getString("path");
			 response.reset();  
			 response.setCharacterEncoding("UTF-8");
			 response.setContentType("application/vnd.ms-excel");  
			 response.setHeader("Content-Disposition", "attachment; filename=\""+ fileName + "\"");
			 
			 ServletOutputStream sos = response.getOutputStream();  
//			 PrintWriter writer = response.getWriter();
			 BufferedInputStream fin = new BufferedInputStream(new FileInputStream(fileName));  
			 byte[] content = new byte[1024];  
			 int length;  
			 while ((length = fin.read(content, 0, content.length)) != -1) {  
			     sos.write(content, 0, length);  
			 }  
			 fin.close();  
			 sos.flush();  
			 sos.close();  
但是现在我的前台都不弹出下载框,怎么弄啊 你的前台是怎么做的?
和你这差不多,在我本机测试没问题,但部署了就下载不了提示文件损坏。蛋疼
pashuidexin 2013-11-05
  • 打赏
  • 举报
回复
引用 7 楼 archwuke1 的回复:
我没有保存啊 ,也是数据库里的流直接流给网页下载了 当然了,java会自己保存个临时文件,这个就管不到了
没有解决。正在头疼中...
一条大红龙 2013-11-05
  • 打赏
  • 举报
回复
楼主解决了吗?我的也出损坏了,也是生成文件流后没保存本地 直接用response.getOutputStream().write后就出现文件已损坏的提示 如果保存到本地的话 就没问题
archwuke1 2013-11-05
  • 打赏
  • 举报
回复
我没有保存啊 ,也是数据库里的流直接流给网页下载了 当然了,java会自己保存个临时文件,这个就管不到了
一条大红龙 2013-11-04
  • 打赏
  • 举报
回复
我也在搞下载 也出问题了 我的是这样的
			 String fileName = result.getString("path");
			 response.reset();  
			 response.setCharacterEncoding("UTF-8");
			 response.setContentType("application/vnd.ms-excel");  
			 response.setHeader("Content-Disposition", "attachment; filename=\""+ fileName + "\"");
			 
			 ServletOutputStream sos = response.getOutputStream();  
//			 PrintWriter writer = response.getWriter();
			 BufferedInputStream fin = new BufferedInputStream(new FileInputStream(fileName));  
			 byte[] content = new byte[1024];  
			 int length;  
			 while ((length = fin.read(content, 0, content.length)) != -1) {  
			     sos.write(content, 0, length);  
			 }  
			 fin.close();  
			 sos.flush();  
			 sos.close();  
但是现在我的前台都不弹出下载框,怎么弄啊 你的前台是怎么做的?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧