php - 如何使用 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 上访问这些文件,我需要使用符号链接。
解决方案
您还需要确保已在 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
希望这可以帮助
推荐阅读
- apollo - 避免在执行异步代码期间替换/混合 apollo-server 数据源中的用户上下文
- python - 具有动态字段值的 Django 表单
- php - 在单个查询中过滤多个字段的查询
- c# - 使用 Simple Injector 基于泛型类型将 DbContext 注入存储库
- python - 如何将测试输出打印到pyqt gui中的标签
- java - 在 Android Studio 中使用 GSON 从文件中读取 JSON
- node.js - 将 pm2 与 CircleCI 一起使用
- r - 如何在 R 表中找到组合比例?
- c++ - 如何在 3x3 网格中的空白处输入 2 或 4?
- r - 在 r 中绘制堆叠和分组的条形图