我知道的几种方法(我知道有可能更多),打开一个链接,用户点击后,浏览器中的文件,什么是在浏览器中打开一个文件的最好方法
- 使用PHP头,模拟文件下载
- 使用<一个>标签将用户重定向到文件的
- 使用JavaScript的window.location的指向文件位置
- Iframe标记
- 路径对象标签
什么是在浏览器中打开文件的最高效,跨浏览器或最好的方式?或者,大多数公司使用什么?
我知道的几种方法(我知道有可能更多),打开一个链接,用户点击后,浏览器中的文件,什么是在浏览器中打开一个文件的最好方法
什么是在浏览器中打开文件的最高效,跨浏览器或最好的方式?或者,大多数公司使用什么?
那么个人最好的方法是创建一个名为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;
}
}
通过这种方式,您可以控制正在发送的下载文件,永远不会泄露您的文件位置,而且恶意文件会以难以找到的散列存储。
所有这三个将工作。但是,如果你想防止外界域(搜索引擎等)访问你的文件,你应该使用PHP:
getfile.php?id=1
OR getfile.php?name=file.txt
,并检查HTTP_REFERER以确保请求来自您的域。
他们是否都打开相同的文件?我以前从未注意过这一点。 – Metropolis 2010-11-09 16:10:57
如果你使用这种方法,一定要检查并确保人们没有使用/ | \ |。| ..字符,否则你冒着人们获取他们不应该访问的文件的风险。 – superfro 2010-11-09 16:12:34
@Metropolis:PHP不依赖于客户端的浏览器 - 它严格地说是服务器端。如果您正确设置标题,则会下载该文件。 – 2010-11-09 16:12:45
使用<a href="file.pdf">download file</a>
是最有效的,跨浏览器的方式!
您所描述的PHP方法只是模拟一个重定向这将实现同样的事情!
JavaScript是javascript关闭的人最不容易接触的!
但是机器人和蜘蛛以及小脚本小子可以通过这种方式获取文件。 – RobertPitt 2010-11-09 16:16:32
我看了一下那条评论,忘了我写了,重新阅读你的问题后,我去了 - 投票我自己的评论:) – RobertPitt 2010-11-09 16:25:37
因为不同的计算机具有不同的插件,和不同的浏览器和操作系统。如果您想保持一致,我的建议是您的第一选择,使用标题指定强制文件下载的内容处置。这可以防止在浏览器内打开一些文件时出现不一致,有些文件在第三方外部程序中打开。
这也指的是无图像,如PDF格式的文件。您应该在浏览器中打开图像。非Flash影片也值得怀疑。
使用的标签将用户重定向到文件
这一个路径。给我一个链接,我可以点击打开使用浏览器中的处理程序。或者,所以我可以右键单击它并将其保存到我的硬盘驱动器。
我想说最好的方法是链接到文件使用<a>
标签设置属性target="_blank"
这样的方式,如果用户机器支持在浏览器中打开文档,它会这样做。如果没有,则会提示您下载该文件。
或者,您可以在iframe或object标签中打开该文件。这是一个主观的问题... – zzzzBov 2010-11-09 16:07:15
我可以问在其他论坛之一....网站管理员也许? – Metropolis 2010-11-09 16:08:13