当前位置:  开发笔记 > 编程语言 > 正文

发起下载的最佳方式?

如何解决《发起下载的最佳方式?》经验,为你挑选了3个好方法。

在基于PHP的网站上,我想在填写简短表单后向用户发送下载包.网站启动的下载应该类似于download.com这样的网站,它们说"你的下载将在一瞬间开始".

我知道的几种可能的方法和浏览器兼容性(基于快速测试):

1)window.open指向新文件.

- FireFox 3 blocks this.  
 - IE6 blocks this.  
 - IE7 blocks this.

2)创建指向新文件的iframe.

- FireFox 3 seems to think this is OK. (Maybe it's because I already accepted it once?)  
 - IE6 blocks this.  
 - IE7 blocks this.

How can I do this so that at least these three browsers will not object? 

额外奖励:有没有一种方法不需要浏览器条件语句?

(我相信download.com有条件地使用这两种方法,但我不能让任何一种方法工作.)

回应和澄清:

Q: "Why not point the current window to the file?"  
A: That might work, but in this particular case, I want to show them some other content while their download starts - for example, "would you like to donate to this project?"

更新:我放弃了这种方法.请参阅下面的答案.



1> Soldarnal..:

您还可以执行元刷新,这是大多数浏览器支持的.Download.com将一个放在一个noscript标签中.



我*讨厌那些.我必须等待几秒钟下载,有时需要1秒钟.我的浏览器保存了浏览会话,这意味着当我重新启动浏览器时,文件会从任何地方开始弹出.我无法复制链接或必须在页面上查找"点击此处..."并停止自动下载.

2> Nathan Long..:

更新:我已经决定放弃这种方法,而只是向用户显示实际文件的链接.我的理由是这样的:

我最初尝试在服务器启动的下载时被浏览器阻止.这让我想到:"浏览器是正确的.是如何知道这是一个合法的下载?它应该阻止显然不是由用户启动的下载."

我可以用于服务器启动的下载的任何方法可以由想要发送恶意软件的人使用.因此,只有当用户通过单击文件链接专门请求文件时,才会发生下载.

你可以自由地反对意见,如果你仍想开始下载,希望这个主题可以帮助你做到这一点.



3> Mark Biek..:

我通常只有一个PHP脚本,可以使用适当的Content-Type将文件直接输出到浏览器

if(file_exists($filename)) {
    header("Pragma:  public");
    header("Expires:  0");
    header("Cache-Control:  must-revalidate, pre-check=0");
    header("Cache-Control:  private", false);
    header("Content-Type:  " . $content-type);
    header("Content-Disposition:  attachment; filename=\"" . basename($filename) . "\";" );
    header("Content-Transfer-Encoding:  binary");
    header("Content-Length:  " . filesize($filename));

    readfile("$filename");
}else{
    print "ERROR:  the file " . basename($filename) . " could not be downloaded because it did not exist.";
}

唯一的缺点是,由于这会设置HTTP标头,因此在您有任何其他输出之前会调用它.

但您可以链接到PHP下载页面,这将导致浏览器弹出下载框而不会弄乱当前页面的内容.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有