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

Posted

技术标签:

【中文标题】从解压缩下载的文件中禁用 Safari【英文标题】:Disable safari from unzip downloaded file 【发布时间】:2013-12-09 10:15:32 【问题描述】:

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

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

【问题讨论】:

Safari 有一个选项“下载后打开安全文件”我认为如果客户端不更改此设置,就无法阻止 safari 这样做 @Burbas:您是否尝试过为文件提供不正确的 MIME 类型?即不是application/zip, application/octet-stream 【参考方案1】:

你不能禁用这个服务器端:(

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

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

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

【讨论】:

感谢您的回复。就像我一样,但需要确定:-) 对我来说,zip 文件似乎已被删除。只剩下文件夹 (我知道它很旧,但它是谷歌的***搜索结果)如果您在自动解压缩后找不到 .zip,请务必检查您的垃圾箱。【参考方案2】:

绝对不是最优雅的版本,但您最终可能会使用浏览器连接并让您的下载脚本更改附件名称并结合 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 用户成功下载文件必须执行的操作。

【讨论】:

对于非 Safari 浏览器(使用 header()echo()exit()),您甚至可以在 else-case 中开始下载,因此该页面只会显示给 Safari 用户。 感谢您的回复。这可能是我需要采取的方向,向 Safari 用户显示一个丑陋的信息框:-) @Burbas:我喜欢这个。也许完全放弃通知,只是用别名扩展名保存它?【参考方案3】:

恐怕你不能在服务器端工作。

你无能为力。使用 WinZip 或其他软件打开下载的文件由用户决定。

我们最多只能向他们显示一个警报/弹出窗口,提示使用这种格式不安全或类似的内容。

【讨论】:

【参考方案4】:

你可以使用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 
); 

【讨论】:

这根本不能真正回答问题。

以上是关于从解压缩下载的文件中禁用 Safari的主要内容,如果未能解决你的问题,请参考以下文章

liunx下把网站文件压缩为zip文件备份提供给ftp下载

电脑下载的分卷压缩包 校验每次都不一样

java文档打包成压缩包并且下载

下载多个文件并以编程方式在客户端压缩它们

压缩文件夹无效或已损坏

django中下载zip压缩文件