我建议阅读 Laravel 8.X 文档以初步了解:https://laravel.com/docs/8.x/filesystem
注意:在你过于得意忘形之前,请确保你了解local 和public 之间的区别。
对于初学者,您的首要目标应该是上传文件并获取UploadedFile 类型。
您可以通过$request->file('name') 之类的方式访问单个文件,或者通过以下方式访问一组图像:
// $request->input('images')
foreach ($images as $image) {
\Log::debug($image->getClientOriginalName());
}
如果您的文件上传可以是单个和/或多个,我建议使用数组方法,因为包含在数组中的单个文件允许您对单个和多个上传使用相同的语法(即:foreach 循环可以正常工作一张图片,没有额外的代码)。
这是一个例子:
use Illuminate\Support\Facades\Storage;
$slug = 'davids-sandwich-photos';
foreach ($images as $image) {
Storage::putFileAs(
'images' .'/'. $slug,
$image,
$image->getClientOriginalName()
);
}
Storage::putFileAs() 可以带 3 个参数:目录、内容、文件名。您可以在上面的代码中看到我插入了静态和派生目录名称的混合。您可以执行'images' .'/'. $slug .'/'. Auth::user()->id 之类的操作将文件保存在/images/davids-sandwich-photos/11 中。
然后,检查您的 repo 目录:/storage/app/ 并查找 images 目录。
您可以在测试时手动删除这些文件夹,以使您的方向正确。
这应该足以让大多数人开始。
为了避免使用Storage门面,你可以使用:
foreach ($images as $image) {
$image->storeAs(
'examples' .'/'. $slug,
$image->getClientOriginalName(),
'public'
);
}
--
如果您想开始操作驱动程序,请查看disks 部分下的config/filesystems.php,但我不是这里的数据库管理员专家。
我还在旅途中保存了这个:https://medium.com/@shafiya.ariff23/how-to-store-uploaded-images-in-public-folder-in-laravel-5-8-and-display-them-on-shared-hosting-e31c7f37a737。如果您遇到符号链接之类的问题,您可能需要它。
<img
v-for="image in example.images"
:key="image.filename"
:src="`/storage/examples/${example.slug}/${image.filename}`"
>
注意:Vue JS 的重要部分是使用 <img src="/storage/examples/slug/filename.jpg"> 如果您的文件位于存储库中,则为 /storage/app/public/examples/slug/filename.jpg 密切注意每个字符。