用于文件下载的Java Servlet:当从表单提交启动时工作,而不是从jQuery下载启动时

Java Servlet for file download: Works when started from form submit, not when started from jQuery download

本文关键字:启动 工作 下载 jQuery 表单提交 文件下载 Java Servlet 用于      更新时间:2023-09-26

我有一个用于文件下载的Java Servlet(取自本页上的示例(实现一个简单的文件下载Servlet),该Servlet一般工作,但不能通过查询启动。

设置工作如下:当单击按钮(输入类型为提交)时,将生成一个文件并将其存储在服务器上。响应被重定向到文件下载servlet,然后该servlet将生成的文件的内容流式传输到响应。除了通过jQuery post函数调用开始下载过程之外,这工作得非常好。

当查看请求时,我能找到的唯一区别是请求的接受头。这是/用于jQuery post和'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'用于表单提交请求。

这可能是决定性的差异吗?如果是这样,我该如何设置接受什么?

这是js中post的函数调用:

$.post("path", {
            action : "action",
            ids: ids.toString()
        }, null, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");

这是我设置content-disposition的部分:

resp.addHeader("content-disposition:",
                        "attachment; filename=name.csv");

浏览器处理XHR响应的方式与处理"正常" HTTP请求的方式不同。如果您的servlet正确地设置了"Content-disposition"标头,那么您就可以进行普通的表单发布了。