我想上传多个图像并将其URL存储到数据库中。
这是我的代码:
<form method="POST" action="{{ route('validated', ['id' => $product->id]) }}) }}">
@csrf
<input type="hidden" name="ID" name="ID" value="{{ $product->id }}">
<div class="form-group row">
<label for="Image" class="col-sm-2 col-form-label">Image</label>
<img src="{{ $product->imageURL }}" />
</div>
<div class="form-group row">
<div class="col-sm-12">
<button type="submit" class="btn btn-lg btn-success">Valider les données</button> | <a href="#">Relancer le fournisseur</a>
</div>
</div>
</form>
并进入我的Controller函数:
$imagePath = Storage::putFile('uploads/image/', $request->image, "imagename");
我遇到此错误:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError引发 消息“在字符串上调用成员函数hashName()”
Stacktrace:0中的Symfony \ Component \ Debug \ Exception \ FatalThrowableError C:\ laragon \ www \ MyProject \ vendor \ laravel \ framework \ src \ Illuminate \ Filesystem \ FilesystemAdapter.php:208
答案 0 :(得分:1)
如果您使用Laravel,则应该能够执行以下操作:
$imagePath = $request->file('image')->store('uploads/image');
或者,如果您想指定文件名,则可以执行以下操作:
$imagePath = $request->file('image')->storeAs('uploads/image', 'myfilename.jpg');
已更新
我注意到,在您的HTML表单中,您没有文件上传输入。如果您没有该文件,Laravel将不会存储文件。
答案 1 :(得分:1)
嗨,我认为您需要使用putFileAs方法来自定义名称,例如:
//Manually specify a file name...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
此方法接受Illuminate \ Http \ File或Illuminate \ Http \ UploadedFile实例,并将自动将文件流式传输到所需位置:
答案 2 :(得分:1)
要上传多张图片,您可以尝试以下代码:
$images = $request->file('images');
foreach ($images as $key => $image) {
if ($request->hasFile('images') && $request->file('images')[$key]->isValid()) {
$urlPath = $request->images[$key]->store('public/images');
$image = new Images();
$image->path = $urlPath;
$image->save();
} else {
return redirect()->back()->withInput()->with('errors', 'Invalid Image file found!');
}
}
假定,您必须在表单中添加enctype="multipart/form-data"
,在函数参数中添加Request $request
,还必须在公共目录中添加storage link
。
我希望这会有所帮助。谢谢
答案 3 :(得分:1)
首先,您要上传图片的表单必须具有enctype="multipart/form-data"
属性。
基于Laravel documentation,您可以使用类似这样的内容:
$path = $request->file('image')->store('image');
答案 4 :(得分:1)
如果您想编写可重用的代码并以不同的方式使用它,请执行此操作
例如,我们有Post and Image模型 在图片模型中添加此代码
public function post()
{
return $this->belongsTo(Post::class);
}
public static function named($name,$type)
{
$photo = new static;
$photo->saveAs($name,$type);
return $photo;
}
public function saveAs($name,$type)
{
$this->path = sprintf("%s/%s/%s-%s",'baseDir',$type,time(), $name);
$this->name = sprintf("%s-%s", time(), $name);
$this->type = $type;
}
public function moves(UploadedFile $file,$type)
{
$file->move($this->baseDir.'/'.$type, $this->name);
return $this;
}
,并在您想要为其添加图像的模型中,例如Post:
public function images()
{
return $this->hasMany(Image::class);
}
public function addImages(Image $image)
{
return $this->images()->save($image);
}
和控制器中:
public function addImages(ImageRequest $request,$id)
{
$image = $this->makeImage($request->file('file'),$request->type);
Post::where('id' ,'=', $id)->first()->addImage($image);
return back();
}
protected function makeImage(UploadedFile $file,$type)
{
return Image::named($file->getClientOriginalName(),$type)->moves($file,$type);
}