如何使用位置选择选项下载文件


How to download file with location choosing option

我正在从服务器下载文件到本地计算机,如下所示:

$file = ( "TestFile.txt" );     
header( "Content-Type: application/octet-stream" );
header( "Accept-Ranges: bytes" );
header( "Content-Length: " . filesize( $file ) );
header( "Content-Disposition: attachment; filename=testfile.txt" );
readfile( $file );

它正在工作,但它总是将文件保存在下载文件夹中,而不询问位置。我想打开窗口,就像在OpenOffice/MS Word中保存任何文档一样,选择文件系统上的任何位置并创建新文件夹选项。当我们在浏览器窗口中另存为时,我想要的窗口也会出现。

希望你能理解我的问题。有可能在所有浏览器/OS中都能做到这一点吗。

感谢

Content Disposition的规范规定接收用户代理应忽略filename参数值中的任何路径组件:

接收[用户代理]不应尊重文件名参数中可能存在的任何目录路径信息。文件名应仅作为终端组件处理。

原因是它引发了一个安全漏洞:

由于该备忘录为发送者提供了建议文件名的方式,接收[用户代理]必须注意发件人建议的文件名不代表危险。以UNIX为例,一些危险将是:

  • 创建启动文件(例如".login")
  • 创建或重写系统文件(例如"/etc/passwd")
  • 覆盖任何现有文件
  • 将可执行文件放入任何命令搜索路径(例如"~/bin/more")
  • 将文件发送到管道(例如"| sh")

没有你提议的那样的东西。如何处理HTTP响应,尤其是如何处理不可显示的内容(如octet-stream),取决于客户端(即web浏览器)。大多数浏览器都会提供下载选项,但不需要任何特定的形式。这样传递建议的文件名大约与当前浏览器所解释的一样多。

当然,总有一个定制的浏览器可以接受额外的头部信息,但目前还没有广泛的浏览器这样做。请记住,一般来说,我们不想将任何关于客户端环境的信息暴露在互联网上,所以即使建议下载路径也可能被视为违反了这一点。想象一下,我建议/etc/passwd作为所需的位置。

如果你真的喜欢窥探访问者的硬盘,可以使用ActiveX或Java小程序:-)

不是直接通过头,但您可以使用java小程序或可能的flash来完成这项工作。

http://www.javaatwork.com/java-download-applet/details.html