我正在为我的公司创建一个小型机构网站,并且会有一个博客(只能从后台发布,仅适用于管理员)。我基本上在图片上传方面遇到了麻烦。我需要将图像链接存储在数据库中,但我不知道如何将上传的图像移动到我的资源文件夹。
这是我第一次在Laravel中处理文件上传,文档与本地存储和云存储有点混淆。我不确定我需要使用哪一个......
我的模板中只有这个:
<label for="image" class="col-md-4 control-label">Upload image</label>
<div class="col-md-6">
<input id="image" type="file" name="image" required>
</div>
我不知道如何在控制器中处理它..
编辑:
所以,在仔细阅读了文档之后,我想我已经理解了。这是我到目前为止所得到的:
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$path = $request->photo->store('image');
}
但现在我收到了这个错误:Call to a member function store() on null
我正在使用public
驱动器,因为每个人都可以看到博文。有什么帮助吗?
答案 0 :(得分:2)
试试这个:
$path = $request->image->store('images');
答案 1 :(得分:1)
您可以使用本地存储,云存储例如持久存储到Amazon S3 Bucket。
在您的控制器中,您可以使用
检查和检索文件if (Input::file('image'))
{
// file is set.
// Move the file.
Input::file('image')->move($destinationPath, $fileName);
}
答案 2 :(得分:0)
存储上传的文件
要存储上传的文件,通常会使用一个已配置的文件系统。 UploadedFile类有一个store方法,可以将上传的文件移动到您的某个磁盘上,这些磁盘可能是本地文件系统上的一个位置,甚至是Amazon S3等云存储位置。
store方法接受相对于文件系统配置的根目录存储文件的路径。此路径不应包含文件名,因为将自动生成唯一ID作为文件名。
store方法还接受可选的第二个参数,用于存储该文件的磁盘名称。该方法将返回文件相对于磁盘根目录的路径:
$path = $request->photo->store('images');
$path = $request->photo->store('images', 's3');
如果您不想自动生成文件名,可以使用storeAs方法,该方法接受路径,文件名和磁盘名作为其参数:
$path = $request->photo->storeAs('images', 'filename.jpg');
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');