从解压缩下载的文件中禁用safari

时间:2013-11-24 20:07:38

标签: php html web header safari

我在Safari中加密的zip下载时遇到了一个小问题。我已设置所有适当的标题以强制下载,但是当文件下载的Safari尝试解压缩时会导致文件损坏。我读过它是因为Safari将文件标记为安全,然后尝试打开它。

有没有办法在下载后禁用Safari打开文件?

4 个答案:

答案 0 :(得分:10)

您无法禁用此服务器端:(

在下载后解压缩档案是Safari的默认行为。这可以在Safari中禁用:Preferences - > General - >取消选中底部的Open "safe" files after downloading框。但这取决于用户自己做到这一点。

如果您愿意,可以在下载页面上显示有关此行为的警告。

PS:拉链不会消失! Safari可以(可选)解压缩,但下载的zip仍然会在解压缩的文件夹旁边。

答案 1 :(得分:5)

绝对不是最优雅的版本,但您最终可能会使用浏览器联结并让您的下载脚本更改附件名称以及Safari用户的通知:

<?php

// $attachmentId used later-on would be a passed parameter that is used 
// to define attachment name

$attachmentId= $_GET['id'];

$userAgent = $_SERVER['HTTP_USER_AGENT']; 
if (strpos($userAgent , 'Chrome') === FALSE && 
strpos($userAgent , 'Safari') !== FALSE)
{
  $attachmentName= 'download.zipname';
  $userNotice= 'SAFARI users: please rename the file from download.zipname to download.zip (due to Safari\'s ZIP file policy (more info))';
} else {
  $attachmentName= 'download.zip';
  $userNotice= '';
}
?>
<span class="notice"><?php print $userNotice; ?></span>
<a href="download.php?id=<?php print $attachmentId;?>" name="<?php print $attachmentName; ?>">Download</a>

因此,基本上在开始下载之前,您需要设置此预下载页面以定义所需的附件名称,并告知safari用户成功下载文件需要执行的操作。

答案 2 :(得分:1)

我很担心,但你不能在服务器端这样做。

你无能为力。用户可以使用WinZip或其他软件检查或取消选中以打开下载的文件。

我们可以做的最多就是向他们展示一个警告/弹出窗口,建议使用这种格式不安全或类似的东西。

答案 3 :(得分:-1)

您可以使用jQuery,safari可以隐藏或取消隐藏按钮或更改一个按钮的事件等。

if (jQuery.browser.mozilla){  
           // insert you code here
else if (jQuery.browser.msie){  
                        // insert you code here  
else if (jQuery.browser.safari){  
                        // insert you code here 
else if (jQuery.browser.opera){  
                 // insert you code here
} else {  
                       // insert you code here 
});