强制保存所有浏览器的文件 - 不在浏览器窗口中打开

Jos*_*shc 4 php download

我正在寻找一个适用于所有浏览器的简单解决方案.

对于特定的文件类型,或通过类的目标链接:如何让它们在所有主流浏览器中强制下载.

我以为我找到了apachce服务器的完美解决方案 - 将其添加到.htaccess中.

http://css-tricks.com/snippets/htaccess/force-files-to-download-not-open-in-browser/

AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf
Run Code Online (Sandbox Code Playgroud)

似乎在Firefox和Safari中工作,但不是chrome或IE(尚未测试任何其他内容)

任何人都可以帮我解决如何建立链接强制下载文件,而不是在浏览器中打开所有浏览器.

我似乎找不到完整的浏览器校对解决方案.这不可能吗?

教程或片段的任何链接都很棒.

我的网站,如果基于PHP,可以使它与PHP一起使用,如果可行的话.

谢谢

Emi*_*röm 5

将Content-Disposition标头设置为"attachment",就像这样(在PHP中):

header('Content-Disposition: attachment');
Run Code Online (Sandbox Code Playgroud)

您甚至可以为下载提供文件名(如果它与URL中给出的文件名不同):

header('Content-Disposition: attachment; filename=file.ext');
Run Code Online (Sandbox Code Playgroud)

如果要直接在Apache服务器中执行此操作,请尝试以下操作:

<FilesMatch "\.(pdf|csv|xls)">
  Header set Content-Disposition attachment
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

(您可以在FilesMatch模式中添加更多扩展名)

如果可以的话,尽量避免使用application/octet-stream标头,也就是说,如果Content-Disposition在没有它的情况下工作.这是因为有些系统实际上会关注Content-Type并将其与文件一起保存.如果用户的系统可以找出文件的正确MIME类型,通常会更好.