2010-11-09 77 views
0

我知道的几种方法(我知道有可能更多),打开一个链接,用户点击后,浏览器中的文件,什么是在浏览器中打开一个文件的最好方法

  • 使用PHP头,模拟文件下载
  • 使用<一个>标签将用户重定向到文件的
  • 使用JavaScript的window.location的指向文件位置
  • Iframe标记
  • 路径对象标签

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

+2

或者,您可以在iframe或object标签中打开该文件。这是一个主观的问题... – zzzzBov 2010-11-09 16:07:15

+0

我可以问在其他论坛之一....网站管理员也许? – Metropolis 2010-11-09 16:08:13

回答

1

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

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

然后你有一个名为下载脚本。 PHP,然后您可以验证用户信息以保护您的刮板等实际文件。

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

哈希的原因是,解析器和刮板可以很容易地找到服务器上的实际文件,所以如果一个刮板看看你的网站,然后看到一个标题叫我的电子书2010.pdf,他将无法从你的服务器下载它,如http://mydomain.com/downloads/My ebook 2010.pdf,因为该文件不存在,它存在于http://mydomain.com/downloads/abc8755ghc7659c75678bf78968.file

安全永远是最好的措施,而且使用PHP将能够你之前,你的应用程序决定天气的文件应该被发送或应b edenied

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; 
    } 
} 

通过这种方式,您可以控制正在发送的下载文件,永远不会泄露您的文件位置,而且恶意文件会以难以找到的散列存储。

1

所有这三个将工作。但是,如果你想防止外界域(搜索引擎等)访问你的文件,你应该使用PHP:

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

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

+0

他们是否都打开相同的文件?我以前从未注意过这一点。 – Metropolis 2010-11-09 16:10:57

+0

如果你使用这种方法,一定要检查并确保人们没有使用/ | \ |。| ..字符,否则你冒着人们获取他们不应该访问的文件的风险。 – superfro 2010-11-09 16:12:34

+0

@Metropolis:PHP不依赖于客户端的浏览器 - 它严格地说是服务器端。如果您正确设置标题,则会下载该文件。 – 2010-11-09 16:12:45

0

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

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

JavaScript是javascript关闭的人最不容易接触的!

+0

但是机器人和蜘蛛以及小脚本小子可以通过这种方式获取文件。 – RobertPitt 2010-11-09 16:16:32

+0

我看了一下那条评论,忘了我写了,重新阅读你的问题后,我去了 - 投票我自己的评论:) – RobertPitt 2010-11-09 16:25:37

1

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

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

0

使用的标签将用户重定向到文件

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

0

我想说最好的方法是链接到文件使用<a>标签设置属性target="_blank"这样的方式,如果用户机器支持在浏览器中打开文档,它会这样做。如果没有,则会提示您下载该文件。

相关问题