【问题标题】:After form-submit, download file提交表单后,下载文件
【发布时间】:2011-08-04 12:37:58
【问题描述】:

我正在使用 struts2 和 servlet。 (由于 servlet 附带的第 3 方 ajax 事物)。

我的一个表单正在发布到一个 servlet。 (名称“/exclude/new.srl”) 我已将 struts2 设置为忽略对“排除”命名空间的所有请求。 所以请求到达 servlet 就好了。

servlet 完成它的工作,然后在结束之前继续执行以下操作:

response.getOutputStream().print("'OK'");
response.getOutputStream().close();

现在我不详细了解第 3 方软件,所以我不太确定,但我认为 OK 语句告诉我的第 3 方 ajax 解决方案关闭表单并刷新页面的一些内容。

这一切都很好。

不过,现在我正在尝试为此添加新的一点。我想向用户发送文件。换句话说,当提交表单时,过去发生的一切都应该发生,但也应该要求用户保存或打开文件。

所以我创建了一个 struts2 动作,它将返回文件,没问题。 但是我如何编程 servlet 以将此文件推送给用户并且还返回响应 OK? 我不需要使用 struts2 操作来推送文件,如果它可以在完全可以接受的 servlet 中完成的话。

有人吗?

【问题讨论】:

    标签: java servlets struts2


    【解决方案1】:

    您可以发送文件

    // Set the headers.
    res.setContentType("application/x-download");
    res.setHeader("Content-Disposition", "attachment; filename=" + filename);
    
    // Send the file.
    OutputStream out = res.getOutputStream();
    File file = new File(yourPath);
    response.setContentLength((int) file.length());
    
    BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
    int readBytes = 0;
    while ((readBytes = buf.read()) != -1)
        stream.write(readBytes);
    buf.close();
    stream.close();
    

    但是我如何编程 servlet 以将此文件推送给用户并且还返回响应 OK?

    我认为这是不可能的。来自 servlet 的响应有一个类型,由 content-type 表示。如果将其设置为下载,则无法发送正常响应,即无法发送“OK”。

    【讨论】:

    • 谢谢!我想我会尝试使用上面提到的解决方案。在向 pushFile 操作发送请求之前处理 jquery 中的 ok-response。我相信这应该可以解决问题
    【解决方案2】:

    您可能需要设置您的未提及的第 3 方 ajax 解决方案,以便在表单提交成功时转发到文件操作/servlet URL(即在表单提交成功后重定向到文件下载)。

    【讨论】:

    • 感谢您的提示!愚蠢的我忘了检查提交表单中实际发生的情况。而表单实际上是由jquery提交的,响应用于在隐藏表单窗口之前检查它的ok。所以我想我可以扩展这个 jquery 方法来向 pushFile 操作发送请求。
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多