繁体   English   中英

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

[英]Force save files all browsers - not open in browser window

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

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

我以为我找到了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

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

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

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

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

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

谢谢

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

header('Content-Disposition: attachment');

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

header('Content-Disposition: attachment; filename=file.ext');

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

<FilesMatch "\.(pdf|csv|xls)">
  Header set Content-Disposition attachment
</FilesMatch>

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

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

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

将此添加到.htaccess(将pdf更改为您想要的任何一个) - 这在我测试过的所有浏览器中都有效(未测试过opera或safari)

假设$file保存了$file的路径,这是我经常用来执行此操作的脚本:

$file = 'file.gif'; // example
$filesize=filesize($file);

if ($filesize > 0) {
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

readfile($file);
}

您确实遇到没有文件结构的设备(例如iPad / iPhone)的问题,但您可以删除Content-Disposition行以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM