本文目录导读:

是的,Laravel 中下载文件主要使用 response()->download() 方法。
基本用法
// 最简单的用法
return response()->download($pathToFile);
// 自定义文件名
return response()->download($pathToFile, 'custom_name.pdf');
// 带数组头信息
return response()->download($pathToFile, 'file.pdf', [
'Content-Type' => 'application/pdf',
]);
从存储系统下载
// 从 storage/app 目录下载
$file = storage_path('app/reports/report.pdf');
return response()->download($file);
// 使用 Storage facade
use Illuminate\Support\Facades\Storage;
public function download()
{
return Storage::disk('public')->download('files/document.pdf', 'document.pdf');
}
从 public 目录下载
// public 目录下的文件
$publicPath = public_path('uploads/file.jpg');
return response()->download($publicPath);
实际控制器示例
class FileController extends Controller
{
public function download($id)
{
$file = File::findOrFail($id);
// 检查文件是否存在
if (!Storage::disk('public')->exists($file->path)) {
abort(404, '文件不存在');
}
return response()->download(
storage_path('app/public/' . $file->path),
$file->original_name,
['Content-Type' => $file->mime_type]
);
}
}
其他相关方法
response()->file() - 在浏览器中显示文件
// 直接在浏览器显示图片或 PDF,而不是下载 return response()->file($pathToFile);
StreamedResponse - 大文件下载
use Symfony\Component\HttpFoundation\StreamedResponse;
public function streamDownload()
{
return new StreamedResponse(function () {
$outputStream = fopen('php://output', 'w');
// 从数据库或外部源流式输出
}, 200, [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="largefile.csv"',
]);
}
注意事项
- 文件路径:使用
absolute path(绝对路径) - 文件权限:确保 Web 服务器有读取权限
- 大文件:建议使用流式传输(StreamedResponse)
- 中文文件名:可能出现乱码,建议使用 URL 编码
// 处理中文文件名
$fileName = rawurlencode('中文文件.pdf');
return response()->download($filePath, $fileName);
response()->download() 是 Laravel 中最常用、最便捷的文件下载方式,满足大多数场景需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播