代码之家  ›  专栏  ›  技术社区  ›  Metropolis

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

  •  0
  • Metropolis  · 技术社区  · 14 年前

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

    • 使用php头模拟文件下载
    • 使用<A>标记将用户重定向到文件路径
    • 使用javascripts window.location指向文件位置
    • iFrAME标签
    • 对象标签

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

    6 回复  |  直到 14 年前
        1
  •  1
  •   RobertPitt    14 年前

    就个人而言,最好的方法是创建一个名为 download.php 然后将文件散列发送给它,假设您有这样的目录布局:

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

    然后您有了一个名为download.php的脚本,您可以验证用户信息,以保护您的实际文件,以备scraper等使用。

    存储没有扩展名的文件是可以的,只要上传文件,您就可以将所有信息存储在您的数据库中,这样当我们发送文件时,我们就具有内容类型、扩展名、原始文件名等,这样我们就可以正确地发送文件。

    散列的原因是解析器和抓取器可以很容易地在服务器上找到实际的文件,所以如果一个抓取器环顾您的站点,然后看到一个名为 我的电子书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;
       }
    }
    

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

        2
  •  1
  •   Evan Mulawski    14 年前

    这三个都能用。但是,如果要阻止外部域(搜索引擎等)访问文件,则应使用php:

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

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

        3
  •  1
  •   superfro    14 年前

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

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

        4
  •  0
  •   fire    14 年前

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

    您描述的PHP方法只是模拟一个重定向,这将实现相同的事情!

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

        5
  •  0
  •   leepowers    14 年前

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

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

        6
  •  0
  •   Scott    14 年前

    我想最好的方法是使用 <a> 设置属性的标记 target="_blank" 这样,如果用户机器支持在浏览器中打开文档,它就会这样做。否则,系统将提示您下载该文件。

    推荐文章