php设置下载文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php设置下载文件名相关的知识,希望对你有一定的参考价值。

比如我在oss上有个文件1.zip,下载地址为*****.oss-cn-shanghai.aliyuncs.com/1.zip 用户点击下载的默认文件名是1.zip 如何让默认保存文件名是2.zip呢???

写个新的控制器来让用户下载,而不是直接用过文件路径下载。 比如:

/index.php?controller=down_file&file=1.zip

然后在Controller里控制输出名就可以实现

$file = './路径/1.zip';
filename = '2.zip';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-type:text/html;charset=utf-8");
header('Content-Disposition: attachment; filename='. $filename);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
readfile($file);
exit;

追问

用oss就是为了不占用网站宽带,这样不是还是用的网站资源吗,那何必再用oss

参考技术A 好像header可以设置的。不过我也弄不来,

通过服务器路由下载; PHP 设置

【中文标题】通过服务器路由下载; PHP 设置【英文标题】:Routing a download through server; PHP settings 【发布时间】:2011-09-23 15:53:48 【问题描述】:

我正在尝试从我们的视频主机 Ooyala 下载视频源文件,但这些文件的文件名很长,没有描述性,并且没有扩展名。由于这些文件将被许多不同类型的人下载,我想解决这个问题,所以我使用以下代码设置标题并将文件读取到输出缓冲区:

ini_set('max_execution_time', 7200);
header('Content-Length:'.$video_file_size);
header('Content-type: binary/octet-stream');
header('Content-Disposition: attachment; filename=movie.'$video_file_extension);
readfile($video_url);

我假设这样的脚本将在整个下载过程中“运行”,所以我使用 ini_set 将“max_execution_time”设置为 7200,一切正常。所以现在我只是想知道我是否应该采取任何其他预防措施?也许是最大内存或其他什么?

谢谢!

【问题讨论】:

【参考方案1】:

所以每个人都有一个可以以至少 94k/s (690+meg at 7200s) 传输文件的链接?每传输一个视频,您的带宽费用就会翻倍。由于您指定的是固定大小,因此电影文件似乎没有变化,那么简单地在服务器上缓存一个副本不是更有意义吗?

进行缓存将 net.burp 杀死下载的机会减少了一半,因为只涉及 you->user 链接,而不涉及 host->you->user。

【讨论】:

谢谢,但文件会不断变化。用户将上传和下载到一个库,我认为在主机可用时存储所有可用视频的缓存(这是我们为它们付费的)效率不高。不过谢谢,我更新了代码以防止进一步混淆。

以上是关于php设置下载文件名的主要内容,如果未能解决你的问题,请参考以下文章

php header 设置文件下载

设置文件大小时php下载限制zip损坏

通过服务器路由下载; PHP 设置

php文件的上传与下载

解决PHP下载大文件失败,并限制下载速度

文件下载期间文件大小不会显示在 PHP 下载脚本上