【问题标题】:Force download from external server and rename强制从外部服务器下载并重命名
【发布时间】:2012-03-03 23:23:34
【问题描述】:

我需要帮助解决我正在开发的工具中的问题。

我需要下载一个外部文件并重命名它,但不使用 readfile()、file_get_contents() 或 fread()(文件太大,无法在服务器上读取它们并在访问者 PC 上再次下载)。

我首先尝试过:

代码:

header("Location: http://www.example.com/example_download.zip");

它适用于下载,但不适用于 example_download.zip 重命名。

所以我尝试了 readfile():

代码:

header("Content-Disposition: attachment; filename="example_download_2.zip"\n\n");
header("Content-Type: application/force-download");
    readfile("http://www.example.com/example_download.zip");
    exit;

上面的代码效果很好,先在服务器上下载远程文件,重命名后用新名字发送给访问者,但是这个过程的资源占用很高,而且带宽占用也很大.

所以我正在寻找一种方法来生成外部文件的强制下载,即时重命名并使用新名称生成下载,但直接从源下载。不可能吗?

提前致谢 问候

【问题讨论】:

标签: php download rename


【解决方案1】:

你不可能做到这一点。如果您的 php 脚本将客户端重定向到其他 url,那么所有 HTTP 标头都留给新的 url 脚本来决定。您必须下载它才能重命名。

【讨论】:

    【解决方案2】:

    HTML5 现在允许你通过download 属性做你想做的事:

    <a href="http://www.example.com/example_download.zip" download="custom_filename.zip">
        Link
    </a>
    

    更多信息:

    http://developers.whatwg.org/links.html#attr-hyperlink-download http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

    【讨论】:

    • 它适用于所有浏览器和所有操作系统吗?因为,下载属性不适用于基于 Linux 的操作系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2010-09-15
    • 2012-11-07
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多