本来想用Struts2的文件下载的、但是觉得配置麻烦、于是用以前的方式来完成这个功能!
没想到啊、到文件下载完毕过后、打开文件一看没有内容啊!
HTML:
- HTML code
<form name="myForm" action="<%=path%>/platform/questionAction!fileDownload.action" method="post" enctype="multipart/form-data"> <a href="javascript: aClick();" >${Tbq.temp1}</a> <input type="hidden" value="${Tbq.fileurl}" name="strurl"/> </form>
JS:
- JScript code
<%--禁用缓存--%> $(document).ready(function(){ $.ajaxSetup({cache:false}); }); function aClick(){ document.myForm.submit(); }
Action:
- Java code
public String fileDownload(){ try{ //得到下载文件的名字 String url = request.getParameter("strurl"); if(url == null || url.equals("")){ return null; } //创建file对象 File file=new File(ServletActionContext.getServletContext().getRealPath("/")+url); //设置response的编码方式 response.setContentType("application/x-msdownload"); //写明要下载的文件的大小 response.setContentLength((int)file.length()); //发送到客户端的文章 //解决中文乱码 response.setHeader("Content-Disposition","attachment;filename="+new String (file.getName().getBytes("gbk"),"iso-8859-1")); //读出文件到i/o流 FileInputStream fis=new FileInputStream(file); BufferedInputStream buff=new BufferedInputStream(fis); byte [] b=new byte[buff.available()]; OutputStream myout=response.getOutputStream(); response.setContentType("application/octet-stream"); myout.write(b); myout.flush(); myout.close(); }catch(Exception ex){ ex.printStackTrace(); }finally{ } return null; }
看图——上传完毕过后、我跑到上传的路径文件中去点开文件查看:
下载完毕后、点击查看:
下面看看文件的大小——原文件:
下载后的文件:
为什么我下载过后的文件内容会是白板呢!
程序没有异常!知道的给指点指点!
感激不尽啊!
------解决方案--------------------
你这文件读写都没写进要下载的文件里啊。。。
------解决方案--------------------
BufferedInputStream buff=new BufferedInputStream(fis);
byte [] b=new byte[buff.available()];
OutputStream myout=response.getOutputStream();
response.setContentType("application/octet-stream");
myout.write(b);
myout.flush();
b是空的吧!