Laravel通过Filesystem实现图片上传存储,支持本地与云存储。1. 使用$request->hasFile()接收文件,$file->store()保存至指定磁盘;2. 配置filesystems.php设置public或OSS等磁盘;3. 可自定义文件名避免冲突;4. 表单需设enctype="multipart/form-data"并配置路由;5. 用Storage::url()生成访问链接,需执行php artisan storage:link。

Laravel 提供了简单且强大的文件系统来处理文件上传,尤其是图片上传和存储管理。通过 Laravel 的 Filesystem 功能,你可以轻松实现图片上传、保存、访问以及灵活配置存储路径(如本地磁盘或云存储如 OSS、S3 等)。
1. 基本图片上传处理
在控制器中接收前端上传的图片,并保存到服务器。
public function upload(Request $request){
if ($request->hasFile('image')) {
$file = $request->file('image');
$path = $file->store('images', 'public'); // 存储到 public disk 的 images 目录
return response()->json(['url' => Storage::url($path)]);
}
return response()->json(['error' => '没有文件上传'], 400);
}
说明:
- $request->hasFile('image'):判断是否有文件上传
- $file->store():将文件保存到指定目录,第二个参数为磁盘名称
-
'public' 磁盘需配合
php artisan storage:link创建软链接,使文件可被 Web 访问
2. 配置文件系统(filesystems.php)
Laravel 的文件系统配置位于 config/filesystems.php。常见配置如下:
'disks' => ['public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
'oss' => [
'driver' => 'oss',
'access_key' => env('OSS_ACCESS_KEY'),
'secret_key' => env('OSS_SECRET_KEY'),
'endpoint' => env('OSS_ENDPOINT'),
'bucket' => env('OSS_BUCKET'),
'cdn_domain' => env('OSS_CDN_DOMAIN'),
],
]
要点:
- 使用 public 磁盘时,文件存于
storage/app/public,需运行php artisan storage:link生成public/storage软链接 - 若使用阿里云 OSS 或 AWS S3,安装对应包(如
overtrue/laravel-filesystem-oss),并配置自定义磁盘
3. 自定义文件名与扩展名
避免文件名冲突,建议使用哈希命名。
$filename = time() . '_' . md5($file->getClientOriginalName()) . '.' . $file->getClientOriginalExtension();$path = $file->storeAs('images', $filename, 'public');
或直接使用 Laravel 自动生成的随机名称:
LANUX V1.0 蓝脑商务网站系统 适用于网店、公司宣传自己的品牌和产品。 系统在代码、页面方面设计简约,浏览和后台管理操作效率高。 此版本带可见即可得的html编辑器, 方便直观添加和编辑要发布的内容。 安装: 1.解压后,更换logo、分类名称、幻灯片的图片及名称和链接、联系我们等等页面。 2.将dbconfig.php里面的数据库配置更改为你的mysql数据库配置 3.将整个文件夹上传至
4. 表单与路由设置
确保 HTML 表单设置 enctype="multipart/form-data":
路由定义(web.php):
Route::post('/upload', [UploadController::class, 'upload']);5. 访问上传的图片
使用 Storage::url() 生成可访问的 URL:
Storage::url('images/abc123.jpg'); // 输出: /storage/images/abc123.jpg确保已执行:
php artisan storage:link基本上就这些。Laravel 的文件上传机制简洁高效,结合配置可适应从本地开发到生产环境的多种需求。关键是理解磁盘驱动、路径映射和 URL 生成逻辑。









