答案:Laravel通过Flysystem实现文件上传、存储与下载。配置public磁盘并创建软链接后,使用store()处理上传,生成唯一文件名并按目录组织;通过Storage::url()获取访问路径;下载时用Storage::disk('public')->download()返回文件,私有文件需权限校验后再输出,确保安全性和用户体验。

Laravel 提供了强大且简洁的文件系统支持,借助其封装良好的 Filesystem 组件(基于 Flysystem),可以轻松实现文件的上传、存储和下载功能。下面以实际场景为例,说明如何在 Laravel 中完成这些操作。
确保 public 磁盘已正确配置:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
然后运行命令创建软链接,使 storage 文件可被 Web 访问:
php artisan storage:link
<form method="POST" action="/upload" enctype="multipart/form-data">
@csrf
<input type="file" name="file">
<button type="submit">上传</button>
</form>
在控制器中处理上传:
一个类似淘宝助理、ebay助理的客户端程序,用来方便的在本地处理商店数据,并能够在本地商店、网上商店和第三方平台之间实现数据上传下载功能的工具。功能说明如下:1.连接本地商店:您可以使用ShopEx助理连接一个本地安装的商店系统,这样就可以使用助理对本地商店的商品数据进行编辑等操作,并且数据也将存放在本地商店数据库中。默认是选择“本地未安装商店”,本地还未安
0
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
public function upload(Request $request)
{
$request->validate([
'file' => 'required|file|max:2048', // 最大 2MB
]);
if ($request->hasFile('file') && $request->file('file')->isValid()) {
// 存储到 public 磁盘,并生成唯一文件名
$path = $request->file('file')->store('uploads', 'public');
// 获取可访问的 URL
$url = Storage::url($path);
return response()->json([
'message' => '上传成功',
'path' => $path,
'url' => $url
]);
}
return response()->json(['error' => '上传失败'], 400);
}
uploads/2025/04/user1.jpg
mimes:jpg,png,pdf)示例:通过路径下载文件
public function download($filename)
{
$path = 'uploads/' . $filename;
if (Storage::disk('public')->exists($path)) {
return Storage::disk('public')->download($path, '自定义名称.pdf');
}
return abort(404);
}
如果只是预览(浏览器打开),使用 response():
return response()->file(Storage::disk('public')->path($path));
对于私有存储的文件,可在控制器中控制权限后再输出:
if ($user->canAccessFile($filename)) {
return Storage::disk('private')->download($path);
}
以上就是Laravel如何实现文件的上传、存储和下载的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号