【问题标题】:Java Servlet for file download: Works when started from form submit, not when started from jQuery download用于文件下载的 Java Servlet:从表单提交开始工作,而不是从 jQuery 下载开始
【发布时间】:2014-05-02 13:53:24
【问题描述】:

我有一个用于文件下载的 Java Servlet(取自本页 (Implementing a simple file download servlet) 上的示例,它通常可以正常工作,但在通过查询启动时不能正常工作。

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

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

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

这是 js 中帖子的函数调用:

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

这是我设置内容处置的部分:

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

【问题讨论】:

  • (取自本页示例)链接丢失
  • response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName() + "\"" );我的意思是你是否已经在 servlet 中设置了上述行,然后不管它的调用框会以何种方式弹出并发生下载
  • @user3127499 我调整了这个问题,我确实设置了标题,但是由于某种原因这似乎被忽略了
  • @Pointy 谢谢,通过正常的表单请求(也通过 JS (stackoverflow.com/questions/133925/…) 它有效)如果您发表评论作为答案,我可以接受它

标签: javascript jquery servlets download


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    相关资源
    最近更新 更多