RoT*_*oRa 10
你不能"使用AJAX下载文件".AJAX是关于从服务器下载数据以供JavaScript处理的.
要让用户下载文件,请使用指向文件/ servlet的简单链接,或者如果您确实需要使用JavaScript,则将URL指定给document.location.href.
此外,您还需要确保服务器(或在本例中为servlet)发送适当的MIME类型,以防最可能出现ZIP文件application/zip.
你不能使用Ajax.您基本上希望让最终用户将文件内容保存到本地磁盘文件系统,而不是将文件内容分配给JavaScript变量,在该变量中它无法对其执行任何操作.出于明显的安全原因,JavaScript没有以编程方式触发" 另存为"对话框的工具,其中文件内容是从任意JavaScript变量提供的.
只需要一个普通的vanilla链接指向servlet URL,然后让servlet将HTTP Content-Disposition标头设置为attachment.它特别是这个标题会强制浏览器弹出另存为对话框.底层页面将保持不变并且不会刷新,因此实现与Ajax相同的体验.
基本上:
<a href="fileservlet/somefilename.zip">download file</a>
Run Code Online (Sandbox Code Playgroud)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ...
response.setHeader("Content-Type", getServletContext().getMimeType(fileName));
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
// ...
}
Run Code Online (Sandbox Code Playgroud)
这也可以在JavaScript中完成,而不需要触发整个Ajax调用:
window.location = "fileservlet/somefilename.zip";
Run Code Online (Sandbox Code Playgroud)
或者,如果您实际上正在使用POST,那么使用(隐藏的)同步POST表单引用servlet的URL并让JavaScript执行form.submit()它.
| 归档时间: |
|
| 查看次数: |
22818 次 |
| 最近记录: |