首页 > 解决方案 > 如何使用 Laravel 的 Storage Facade 存储多个上传的文件

问题描述

目前我有一个运行 Laravel 5.8 的项目,我正在尝试使用一种允许用户将自己的图像上传到站点并将其存储在公共文件夹中的表单。当尝试使用带有 'put' 方法的 Storage 外观时,会返回一个路径,但实际上并没有存储图像。

if ($request->hasfile('images')) {
    foreach ($request->file('images') as $file) {
        $path = Storage::disk('public')->put('images', $file);
        echo $path;
    }
}

这是我尝试使用的代码。该路径得到了应有的回显,并且我没有对文件系统配置进行任何更改。在表单中,输入字段图像允许提交多个文件,并且表单确实具有enctype="multipart/form-data". 该$file变量还包含一个实例Illuminate\Http\UploadedFile

我之前使用的有效的代码是:

if ($request->hasfile('images')) {
    foreach ($request->file('images') as $file) {
        $file->move(public_path('images'), $file->getClientOriginalName());
    }
}

如果 Laravel 可以在上传时给它一个唯一的文件名,我可以使用我以前的代码,但是什么会导致我的带有 Storage 门面的代码无法正确保存图像?put 函数只是不能那样工作还是我忽略了什么?

编辑: 所以我意识到图像实际上是正确保存的。我正在查看public文件夹而不是storage文件夹,这就是为什么我的第二个代码示例“有效”但不是第一个的原因。我意识到在使用 Storage 门面时,如果我想在 Web 上访问这些文件,我需要使用符号链接。

标签: phplaravel

解决方案


您还需要确保已在 Ubuntu 服务器或 Windows 开发机器上创建了指向存储文件夹的符号链接。

您可以使用的 Windows:mklink /j /path/to/laravel/public/youfolder /path/to/laravel/storage/youfolder

Ubuntu:ln -s /path/to/laravel/public/youfolder /path/to/laravel/storage/youfolder

要检查和设置,您还可以使用使用php artisan storage:link

希望这可以帮助


推荐阅读