日期:2014-05-18  浏览次数:20624 次

Struts2 文件下载好后、没有内容~~~~~~~~~~~~~~·
本来想用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是空的吧!