2013-11-24 122 views
11

我在Safari中遇到了加密zip下载的小问题。我已经设置了所有适当的头文件来强制下载,但是当文件下载的Safari试图解压缩文件时会导致文件损坏。我读过它的原因是Safari将文件标记为安全,然后尝试将其打开。从解压缩下载文件中禁用Safari浏览器

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

+0

Safari浏览器有一个选项“下载后打开安全文件”我认为如果客户端不更改此设置,则无法继续使用Safari浏览器 – matteok

+1

@Burbas:您是否尝试过为文件提供不正确的MIME类型?即不是'application/zip,application/octet-stream' –

回答

10

您不能禁用此服务器端:(

这是Safari浏览器的默认行为,其下载后解压档案这可以在Safari浏览器被禁用:Preferences - >General - >取消勾选Open "safe" files after downloading底部。 。但是它给用户如果喜欢自己做这个

,可以显示一个关于下载页面上此行为警告

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

+0

谢谢你的回复。这是我虽然,但需要确保:-) – Burbas

+1

与我一样,zip文件似乎被删除。只有文件夹保持 –

+0

(我知道它已经很旧了,但它是一个最好的谷歌结果) 如果你在自动解压缩后找不到.zip,一定要检查你的垃圾。 –

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用户有关如何成功下载该文件的操作。

+0

你甚至可以在非Safari浏览器的其他情况下(使用'header()','echo()'和'exit()')开始下载。所以该页面只会显示给Safari用户。 – SaschaM78

+0

感谢您的回复。这可能是我需要采取的方向,向Safari用户展示一个丑陋的信息框:-) – Burbas

+0

@Burbas:我喜欢这个。也许完全放弃这个通知,只是用别名扩展名保存它? –

0

您可以使用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 
}); 
+0

这并没有真正回答这个问题。 –

1

恐怕但你不能在服务器端运行此。

你不能帮助这个。用户可以使用WinZip或其他软件检查或取消选中打开下载的文件。

在最大限度上我们可以做的是向他们显示一个警告/弹出窗口,暗示此格式的使用不安全或类似的行上的东西。