下载时重命名文件

Bof*_*fin 7 php

我想在用户下载文件时重命名文件.

现在,我正在发送内容处理和内容长度标题,然后使用fpassthru PHP函数将文件发送给用户.

但是这种方法有3个问题:

  1. 如果我以这种方式发送大(3-4Gb以上)文件,那么我的PHP脚本运行时间过长,可能会被超时杀死.
  2. 如果用户取消下载,PHP脚本将继续读取并发送该文件
  3. 如果用户暂停下载,则以后无法恢复.

有没有更好的方法可以在下载时重命名文件?

Rie*_*u͢s 15

自从提出这个问题以来,已经过了一段时间,并html5给了我们一个不同的方法:

<a href="someWeiredFileName.rar" download="coolFilename.rar">Download</a>
Run Code Online (Sandbox Code Playgroud)

attribute 下载(了解更多)定义了默认filename存储在客户计算机上的文件(他仍然能够去改变它!).

注意:这不会影响服务器上的任何内容.


pow*_*tac 12

<?php
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?> 
Run Code Online (Sandbox Code Playgroud)
  1. 该文件将作为"downloaded.pdf"提供下载,而其原始名称为"original.pdf".

伪代码

while(1) {
    Echo "..."; //<-- send this to the client
    if (connection_status()!=0){
    die;
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果用户使用取消浏览器,则可以停止PHP脚本 connection_status()

  2. HTTP无法重新连接已关闭的连接.FTP可以!