我正在laravel中处理多个图片上传。上传成功但是,我遇到了问题。以后使用我应该存储在数据库中。对于单列,它很容易,但对于不同的列,我不能做到这一点。
这是我的图片上传代码 $ images = []; $ destDir =“public / uploads /”;
if($request->file('image1')) $images[]=$request->file('image1');
if($request->file('image2')) $images[]=$request->file('image2');
if($request->file('image3')) $images[]=$request->file('image3');
foreach($images as $image)
{
if(!empty($image))
{
$imageName = $image->getClientOriginalName();
$extension = $image->getClientOriginalExtension();
$temPath = $image->getRealPath();
$enImg = mt_rand(1111,9999).".".$extension;
$newPath = $destDir.$enImg.".".$extension;
move_uploaded_file($temPath, $newPath);
}
}
答案 0 :(得分:1)
我有一种感觉,你正在以一种让你更难的方式接近这一点。您可以只设置多个文件输入,并将输入的名称设置为数组,而不是在表单中创建多个单独的文件输入:
<form action="demo_form.asp">
Images: <input type="file" name="images[]" multiple>
<input type="submit">
</form>
然后在你的php中你可以做这样的事情:
if (isset($request->all()['images'])) {
$this->persistUserImages($request->all()['images'], $userId);
}
/**
* Persists user images to storage and DB
*
* @param array $userImages
* @param int $userId
* @return array
*/
private function persistUserImages(array $userImages, $userId = 1)
{
if (empty($userImages)) {
return [];
}
$uploadedUserImagesFilenames = $this->uploadUserImagesToCloud($userImages, $userId);
foreach ($uploadedUserImagesFilenames as $filename) {
$userImage = new UserImage([
'user_id' => $userId,
'filename' => $filename,
'visible' => 1
]);
$userImage->save();
}
}
答案 1 :(得分:0)
创建数据透视表并将图像存储在不同的行中..
Table schema:- `images` table
columns `id`,`user_id`(foreign key),`image_path`
每次都将$newPath
存储在此表格中。
答案 2 :(得分:0)
您可以这样做。在您的刀片中,
<form action="{{url('path')}}" methos="post" enctype="multipart/form-data">
Images: <input type="file" name="images[]" multiple>
<input type="submit">
</form>
在您的方法中,
public function store(Request $request){
foreach ( $request->images as $image) {
Model::create([
'image_url' => $image,
]);
}
}
或 请点击以下链接。这是解决此问题的非常简单的方法。 Multiple Image Upload In Laravel
希望您可以解决您的问题。