Java 使用AJAX在JSP中下载文件
我有一个简单的JSP页面,其中包含两个按钮:查看和导出。当点击查看按钮时,我将从数据库中获取数据,将副本保存到会话中,并将HTML代码写入带有数据的标签中。稍后,当用户单击“导出”时,我希望在服务器中生成一个excel文件(包含来自会话的数据),并将其下载到客户端 Excel文件已在服务器端成功创建。我正在使用客户端的AJAX请求从服务器下载Excel文件 JSP代码:Java 使用AJAX在JSP中下载文件,java,jsp,servlets,Java,Jsp,Servlets,我有一个简单的JSP页面,其中包含两个按钮:查看和导出。当点击查看按钮时,我将从数据库中获取数据,将副本保存到会话中,并将HTML代码写入带有数据的标签中。稍后,当用户单击“导出”时,我希望在服务器中生成一个excel文件(包含来自会话的数据),并将其下载到客户端 Excel文件已在服务器端成功创建。我正在使用客户端的AJAX请求从服务器下载Excel文件 JSP代码: try{ String fi
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页面。并且毫无例外地写入响应outputstream。但并没有从浏览器中弹出下载。有什么问题吗?Ajax应该用于元语言,而不是二进制文件 简单的
<a href="/SIP/rptClientInvestmentDetails.jsp?requesttype=export"
target="_blank">Export</a>
这就是你所需要的
如果您确保说出了
response.setHeader(“Content Disposition”,“attachment
),您应该按照BalusC的建议删除target属性。我认为您可以使用location.href=“提供java类函数名"。这将在不使用ajax调用的情况下将控制权从jsp转移到java函数。您不会得到一个异常,说明您已经开始写入响应,因为您尝试在jsp中嵌入的不适当java代码中再次写入响应?请注意,target
属性在这里是不必要的。它甚至可能是di因为这种类型的下载内容类型会强制进行另存为对话,所以最终用户将保留一个完全空白的选项卡。由于明显的安全原因,JavaScript没有工具强制对独立检索/生成的内容进行另存为对话。@Vivek它是“可用的”,但这不是一个好主意。如果你想把整个生命都花在一个名为“excel for javascript”的项目上,但吃黄色的意大利面更明智。@BalusC我的一些客户喜欢在单独的窗口中显示错误消息。我不知道为什么。:dp请列出实现这种效果所需的框架。