在下载之前用PHP重命名文件而不将其保存到服务器?

时间:2014-04-29 16:04:50

标签: php

我有一个Adobe Illustrator文件(AI),我们目前在网站上有一个链接,然后将该文件下载到您的计算机上。

链接看起来像这样......
http://domain.com/crm/index.php?entryPoint=fileupload_download&id=22440435-e8ee-bd6f-7612-533b2cd7690f&field=fuaifile_c&type=D1_Designs

我需要做的是在下载时重命名此文件。

所以我问在下载之前是否可以通过另一个PHP文件传递这个下载,这样我就可以动态更改用户下载的文件名。我无法更改服务器上的文件名,但是当它下载时,我希望能够在运行时为文件名添加一些ID号码,如果可能的话?任何想法如何实现这一点,而无需使用新名称在服务器上重新保存图像?

3 个答案:

答案 0 :(得分:5)

您要查找的是Content-Disposition标题,如RFC 2183中所述:

Content-Disposition: attachment; filename=example.ai

您可以使用PHP header()函数设置此标头。

答案 1 :(得分:2)

只需设置Content-Disposition

即可
header('Content-Disposition: attachment; filename="downloaded.pdf"');

(取自PHP文档的示例:http://www.php.net/manual/en/function.header.php)。

添加ID:

$id = generateIdFromSomewhere();
header('Content-Disposition: attachment; filename="downloaded'.$id.'.pdf"');

答案 2 :(得分:2)

这很难看,并假设这些文件不是超出memory_limit的“大”文件,但是

$data = file_get_contents($original_url);
header('Content-disposition: attachment; filename="new name with id numbers');
header("Content-type: application/octet-stream");
echo $data;

你可以随时增强这个来做字节服务 - 从原始网址吸取10k,向用户吐出10k等等......