在浏览器中打开文件的最佳方法是什么?

时间:2010-11-09 16:05:39

标签: php javascript html5 download

我知道在用户点击链接后在浏览器中打开文件的几种方式(我知道可能还有更多)

      
  • 使用PHP标头模拟文件下载
  •   
  • 使用< a>用于将用户重定向到文件路径的标记
  •   
  • 使用javascripts window.location指向文件位置
  •   
  • iframe标记
  •   
  • 对象标记

在浏览器中打开文件的最有效,跨浏览器或最好的方法是什么?或者,大多数公司使用什么?

6 个答案:

答案 0 :(得分:1)

这三个都有效。但是,如果您想阻止外部域(搜索引擎等)访问您的文件,您应该使用PHP:

getfile.php?id=1getfile.php?name=file.txt

并检查HTTP_REFERER以确保请求来自您的域名。

答案 1 :(得分:1)

因为不同的计算机有不同的插件,不同的浏览器和操作系统。如果你想保持一致,我的推荐是你的第一个选择,使用标题来指定强制下载文件的内容处理。这将防止在浏览器中打开某些文件时出现不一致,有些文件在第三方外部程序中打开。

这也指非图像文件,例如PDF。您应该在浏览器中打开图像。非闪光电影也值得怀疑。

答案 2 :(得分:1)

个人而言,最好的方法是创建一个名为download.php的脚本,然后将文件哈希发送到该脚本,想象一下你有一个像这样的目录布局:

/downloads/
    /2010/
        /abc8755ghc7659c75678bf78968.file
        /abc8755ghc7659c73278ef78998.file
        /abc8755ghc7659c75678bf78968.file
    /2009/
        /abc8755ghc7659c75678bf78968.file
        /abc8755ghc7659c75678bf78968.file

然后你有一个名为download.php的脚本,然后你可以验证用户信息以保护你的实际文件以便刮刀等。

存储没有扩展名的文件是可以的,只要文件上传时你可以将所有信息存储在数据库中,这样当我们发送文件时我们就有了Content-Type,Extension,Original文件名等,以便我们可以正确发送

散列的原因是解析器和抓取工具可以轻松找到服务器上的实际文件,因此如果刮刀查看您的网站,然后看到一个名为 My ebook 2010.pdf ,他将无法从您的服务器下载http://mydomain.com/downloads/My ebook 2010.pdf,因为该文件不存在,它存在于http://mydomain.com/downloads/abc8755ghc7659c75678bf78968.file

安全始终是最好的衡量标准,同时使用PHP您可以在应用程序决定应该发送文件或应该发送文件的天气之前验证实际用户

PHP示例脚本就是这样:

include 'all.the/files/needed.phhp';

if(!logged_in())
{
    header('Location: /');
    exit;
}

$FileRequest = FileRequest::getInstance();
$User = User::getInstance();

if($FileRequest->isValid)
{
   if($user->canDownload($FileRequest->GetDatabaseID()))
   {
      $FileRequest->SendFile();
      exit;
   }
}

通过这种方式,您可以控制正在发送的下载,您永远不会透露您的文件位置,并且fiel会存储一个很难找到的哈希值。

答案 3 :(得分:0)

使用<a href="file.pdf">download file</a>是最有效的跨浏览器方式!

您描述的PHP方法只是模拟重定向,这将实现相同的目标!

对于关闭javascript的人来说,Javascript是最不容易访问的!

答案 4 :(得分:0)

  

使用标记将用户重定向到文件路径

这一个。给我一个链接,我可以点击使用浏览器中的处理程序打开。或者,我可以右键单击它并将其保存到我的硬盘上。

答案 5 :(得分:0)

我认为最好的方法是使用<a>标记链接到该文件,如果用户计算机支持在浏览器中打开文档,则使用该方式设置属性target="_blank"。如果不是,则会提示您下载文件。