【问题标题】:Download file in JSP with AJAX使用 AJAX 在 JSP 中下载文件
【发布时间】:2012-10-29 14:07:13
【问题描述】:

我有一个简单的 JSP 页面,其中包含 2 个按钮:查看和导出。单击查看按钮时,我将从数据库中获取数据,将副本保存到会话中,并将 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 页面。并且无一例外地写入响应输出流。但是浏览器没有弹出下载。可能是什么问题?

【问题讨论】:

  • 您没有收到异常说明您已经开始写入响应,因为您尝试使用嵌入在 JSP 中的不适当的 Java 代码再次写入响应?

标签: java jsp servlets


【解决方案1】:

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

一个简单的

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

就是你所需要的。

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

【讨论】:

  • 请注意target 属性在这里不是必需的。它甚至可能令人不安,因为它给最终用户留下了一个完全空白的标签,因为这种下载内容类型会强制另存为对话框。
  • 由于明显的安全原因,JavaScript 无法强制与独立检索/生成的内容进行 另存为 对话。
  • @Vivek 它是“可用的”,但这不是一个好主意。如果你想把你的一生都花在一个名为“excel for javascript”的项目上,但是用黄色吃意大利面更聪明。
  • @BalusC 我的一些客户喜欢在单独的窗口中显示错误消息。我不知道为什么。 :D
【解决方案2】:

我认为你可以使用 location.href="Provide the java class function name"。这会在不使用 ajax 调用的情况下将控制权从 jsp 转移到 java 函数

【讨论】:

  • 请列出实现这种效果所需的框架。
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2016-01-10
  • 2015-12-11
  • 2015-06-01
  • 2012-06-25
相关资源
最近更新 更多