如何使用jQuery AJAX和Spring MVC 3从服务器下载文件

我想实现从服务器上载文件的下载(使用AJAX)。在服务器端,我编写了代码

@RequestMapping(value = "/getInvoice/approvalId/{approvalId}", method = RequestMethod.GET)

public

@ResponseBody

byte[] getInvoice(@PathVariable("approvalId") Integer approvalId, HttpServletResponse response) throws IOException {

String fileName = this.approvalService.getFullInvoicePath(approvalId);

File file = new File(fileName);

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");

response.setHeader("Pragma", "no-cache");

response.setHeader("Cache-Control", "no-cache");

response.setContentLength((int) file.length());

return FileUtils.readFileToByteArray(file);

}

Fiddler2显示响应:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Disposition: attachment; filename="invoice.pdf"

Pragma: no-cache

Cache-Control: no-cache

Content-Type: application/octet-stream;charset=UTF-8

Content-Length: 1028351

Date: Sun, 17 Jul 2011 08:16:41 GMT

%PDF-1.4

%����

6 0 obj <</Linearized 1/L 1028351/O 8/E 1024254/N 1/T 1028185/H [ 5056 544]>>

endobj

xref

6 238

*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

如何处理并强制浏览器使用jQuery下载文件?

回答:

通常使用两个选项,但都不涉及AJAX。而且jQuery也不会有很大的帮助。

选项1:iFrame

在页面中放置一个 不可见的 IFrame:

<iframe id="downloadFrame" style="display:none"></iframe>

当下载开始时(您没有提到它是如何触发的),请使用Javascript(可能还有jQuery)设置IFrame的URL,这与/getInvoice/approvalId/123您的情况类似:

var iframe = document.getElementById("downloadFrame");

iframe .src = "/getInvoice/approvalId/123";

设置IFrame URL应该会触发浏览器显示下载对话框。

选项2:导航到下载URL

第二种选择更简单。只需导航到下载URL。一旦浏览器发现它是无法显示的MIME类型,它将显示一个下载对话框。

因此,当触发下载时,请执行以下JavaScript代码:

window.location.href = "/getInvoice/approvalId/123";


回答:

我不确定是否所有浏览器都会可靠地显示包含PDF文件的下载对话框。某些浏览器 可能会 尝试在浏览器本身中显示它。在Content-

DispositionHTTP标头是有益的,但不能保证。

以上是 如何使用jQuery AJAX和Spring MVC 3从服务器下载文件 的全部内容, 来源链接: utcz.com/qa/415995.html

回到顶部