thinkphp 中强制下载文件应使用 download 方法,调用时传入文件的绝对路径即可。该方法会自动设置响应头为 application/octet-stream 并触发浏览器下载行为。若需指定保存的文件名,可传入第二个参数;若需删除源文件,可传入第三个布尔参数。

如何指定自定义文件名进行下载
在调用 download 方法时,第二个参数用于定义下载后的文件名。如果不传此参数,系统会默认提取原文件的文件名。通过显式传递字符串,可以覆盖默认行为,确保用户下载得到的文件名为预期值。

public function downloadCustomName()
{
// 假设文件位于 public/uploads/report.pdf
$filePath = root_path() . 'public/uploads/report.pdf';
// 强制下载,并重命名为 'my_report.pdf'
return download($filePath, 'my_report.pdf');
}
如何在下载后自动删除源文件
当需要实现一次性下载链接或临时文件清理时,可以将 download 方法的第三个参数设置为 true。这样在响应发送完成后,框架会自动执行 unlink 操作删除服务器上的原始文件。此功能适用于生成临时验证码、一次性报告等场景。

public function downloadAndDelete()
{
$filePath = root_path() . 'public/temp/secret.txt';
// 下载后自动删除服务器上的 secret.txt
return download($filePath, null, true);
}
如果文件路径不存在会发生什么
当传入的 download 方法路径指向一个不存在的文件时,ThinkPHP 底层会检查文件存在性。如果文件不存在,通常会抛出异常或返回空响应,具体取决于版本和配置。在实际开发中,建议在调用前使用 file_exists 进行预判,以避免运行时错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











