使用AJAX在JSP中下载文件

时间:2012-10-29 14:07:14

标签: java jsp servlets

我有一个简单的JSP页面,其中包含2个按钮:View和Export。单击“查看”按钮时,我将从数据库中获取数据,将副本保存到会话中,并将HTML代码写入带有数据的标签中。稍后当用户单击“导出”时,我想在服务器中生成一个excel文件(使用会话中的数据)并将其下载到客户端。

在服务器端成功创建了Excel文件。我正在使用来自客户端的AJAX请求从服务器下载Excel文件。

JSP代码:

 try{                           

                    String filepath=ExportToExcel(session.getAttribute("InvestmentDetails"));

                    //Setting file to download
                    response.setContentType( "application/x-download");

                    response.setHeader("Content-Disposition","attachment; filename=\"SIPInvestment_531.xls\"");                                                                             
                    response.setStatus(200);
                    InputStream in = null;
                    ServletOutputStream outs = response.getOutputStream();                        

                    try {                            
                        File filetodownload=new File(filepath);
                        response.setContentLength(Integer.parseInt(String.valueOf(filetodownload.length())));                                
                        in = new BufferedInputStream(new FileInputStream(filetodownload));                            
                        int ch;
                        while ((ch = in.read()) != -1) {
                            outs.print((char) ch);
                        }
                    }
                    finally {
                        if (in != null) in.close(); 
                    }
                    outs.flush();
                    outs.close();                                                

                }
                catch(Exception ex){
                    str=ex.getMessage();                                          
                }

这是Javascript:

 xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function(){
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {


                    }
            }
            xmlhttp.open("POST","/SIP/rptClientInvestmentDetails.jsp?requesttype=export",false);
            xmlhttp.send();                          

请求到达JSP页面。没有任何例外,它写入响应输出流。但是没有从浏览器弹出下载。可能是什么问题?

2 个答案:

答案 0 :(得分:2)

Ajax应该用于元语言,而不是二进制文件。

一个简单的

 <a href="/SIP/rptClientInvestmentDetails.jsp?requesttype=export"
    target="_blank">Export</a>

就是你所需要的一切。

如果您确定说response.setHeader("Content-Disposition","attachment,则应删除目标属性,如BalusC建议的那样。

答案 1 :(得分:0)

我认为你可以使用location.href =“提供java类函数名”。这会将控件从jsp转移到java函数而不使用ajax调用