0

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

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

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

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

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

你怎么看?

4

1 回答 1

1

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

于 2013-09-05T16:17:37.440 回答