我不知道如何以最好的方式做到这一点(只是PHP,PHP + javascript...):
我必须允许用户发送一些表单数据,这些数据会生成一个报告文件,该文件与之前生成的其他文件一起列出,每个文件都有一个下载链接。我想允许用户选择在生成后保存它(内容处置标头)。如果他们不想要,该链接仍将在列表中可用。
因此,我尝试通过发送"内容处置:附件"标头来执行此操作。一切正常(文件存储在服务器中,以便从上述链接进一步可用,并且还会将其发送给用户,以便他们可以立即将其存储在系统中)。问题是报告列表不会使用新报告进行更新,因为我无法同时在响应中获取刷新的 HTML(我可以吗?
我也尝试发送位置标头,但这似乎打破了以前的功能。
你可能认为我是个白痴,但是为了在发送表单后在列表中显示新创建的文件,我也尝试使用javascript而不是Content-Disposition标头,因此一旦创建文件,脚本就会调用window.open(),但这导致在浏览器中按原样打开文件(CSV文件): 纯纯文本。我考虑的另一个选择是首先使用新创建的报告提供 HTML,再加上一个通过 ajax 向服务器进行第二次调用的脚本,然后 PHP 这次发回包含文件内容的 Content-Disposition 标头。但这对我来说似乎太扭曲了。或者这是在单独的用户交互中执行此操作的最佳和最常见的方法?
你觉得怎么样?
我会使用您的方法,通过 AJAX 返回文件名,然后使用window.open()
,但以此创建一个.htaccess
文件,在其中存储.csv文件并添加AddType application/octet-stream .csv
应该强制下载。