如何下载带位置选择选项的文件

时间:2011-06-25 11:44:29

标签: php file download

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

$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中保存任何文档,并选择在文件系统上选择任何位置并创建新文件夹选项。当我们在浏览器窗口中保存时,我想要的窗口也会打开。

希望你理解我的问题。是否可以在所有浏览器/操作系统中执行此操作。

由于

3 个答案:

答案 0 :(得分:3)

没有你提议的事情。由客户端(即Web浏览器)如何处理HTTP响应,特别是如何处理不可显示的内容(例如您的octet-stream)。大多数浏览器都会提供下载选项,但不要求它具有任何特定形式。像你一样传递建议的文件名与当前浏览器解释的一样多。

当然,总会有一个定制的浏览器可以接受额外的标题信息,但目前没有广泛使用的浏览器。请记住,一般来说,我们不希望将有关客户端环境的任何信息暴露给互联网,因此即使建议类似下载路径的内容也可能被视为违反此类信息。想象一下,我建议将/etc/passwd作为所需的位置。

如果您真的想嗅探访问者的硬盘,请使用ActiveX或Java小程序: - )

答案 1 :(得分:3)

specification of Content-Disposition读取接收用户代理应忽略filename parameter值中的任何路径组件:

  

接收[用户代理]不应该尊重文件名参数中可能出现的任何目录路径信息。文件名应仅被视为终端组件。

原因是它推翻security vulnerability

  

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

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

答案 2 :(得分:2)

不是直接通过标题,但你可以使用java小程序,或者可能使用flash来完成这项工作。

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