【问题标题】:Document generation, force download, and refresh page文档生成、强制下载、刷新页面
【发布时间】:2013-09-09 13:50:15
【问题描述】:

我不确定如何以最好的方式做到这一点(只是 PHP、PHP + javascript...):

我必须允许用户发送一些表单数据,这些数据生成报告文件与之前生成的其他文件一起列出,每个文件都有一个下载链接。我想允许用户选择在生成后保存它(内容处置标头)。如果他们不想要,该链接仍会在列表中提供。

所以,我尝试通过发送 "Content-Disposition: attachment" 标头来做到这一点。一切都很好(文件存储在服务器中,以便从上述链接进一步获得,它也被发送给用户,以便他们可以立即将其存储在他们的系统中)。问题是报告列表不会使用新报告进行更新,因为我无法同时在响应中获取刷新的 HTML(可以吗?)。

我也尝试发送 Location 标头,但这似乎破坏了之前的功能。

您可能认为我是个白痴,但为了在发送表单后在列表中显示新创建的文件,我还尝试使用 javascript 代替 Content-Disposition 标头,这样一旦文件创建后,脚本调用 window.open(),但这会导致在浏览器中按原样打开文件(CSV 文件):纯纯文本。我想到的另一种选择是首先使用新创建的报告提供 HTML,再加上一个通过 ajax 对服务器进行第二次调用的脚本,然后 PHP 这次将带有文件内容的 Content-Disposition 标头发送回。但这对我来说似乎太扭曲了。或者它是在单一用户交互中做到这一点的最佳和最常见的方式吗?

你怎么看?

【问题讨论】:

    标签: php javascript header attachment content-disposition


    【解决方案1】:

    我会使用您的方法,通过 AJAX 返回文件名,然后使用 window.open(),但这样创建一个 .htaccess 文件,您将在其中存储 .csv 文件并添加 AddType application/octet-stream .csv,这应该会强制下载.

    【讨论】:

    • 似乎是一个不错的解决方案。将 MIME 类型更改为 csv 文件有什么陷阱吗?
    猜你喜欢
    • 2015-10-19
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多