PHP / Laravel多个文件上传错误-未定义偏移

时间:2018-09-11 09:50:33

标签: php laravel

我对多个文件上传有点陌生,并且出现一个错误,我的两个字段是可选的。我尝试测试如果客户端上载了主图像和图像3字段,然后在提交表单错误时出现了什么。 它在我的代码"Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$key],50);"

中显示未定义的偏移量:2

这是我的字段

<label for="">Primary Image </label>
<input type="file" name="prod_image[]" accept="image/*" required>

<label for="">Image 2 (Optional) </label>
<input type="file" name="prod_image[]" accept="image/*">

<label for="">Image 3 (Optional) </label>
<input type="file" name="prod_image[]" accept="image/*">

这是我在后端的代码。

$files = $request->prod_image;

//set new filename and upload to /storage/uploads/
foreach($files as $key => $file) {
    $filenameWithExt = $file->getClientOriginalName();
    $filename = pathinfo($filenameWithExt,PATHINFO_FILENAME);
    $extension = $file->getClientOriginalExtension();
    $fileToArray[] = strtolower(preg_replace('/[^A-Za-z0-9 _ .-]/', '', $request->prod_name)).'-'.generate_random_str(10).'.'.$extension;
    $implodeFile = implode(',', $fileToArray);
    $fileToStore = explode(',', $implodeFile);

    Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$key],50);
}
$insert = $this->productData($request);
$getInsertedId = DB::table('products')->insertGetId($insert);

//insert to product_image table
for($i = 0; $i < count($fileToStore); $i++) {
   DB::table('product_image')->insert(['product_id' => $getInsertedId,'product_image' => $fileToStore[$i]]);
}

为了将所有上传的图像以及数据插入到我的product_image表中,即使他们跳过/忘记将图像放在“图像2”字段中,该怎么做。

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题,所以不用在我的foreach中使用$ key来检查字段中的每个键。 我将$ initKey = 0设置为将其用于$ fileToStore并递增它。我不知道这是否是最好的方法,但可以解决我的问题。对不起我的解释不好,我不好。

这是我的代码

$files = $request->prod_image;
$initKey = 0;
foreach($files as $key => $file) {
    $filenameWithExt = $file->getClientOriginalName();
    $filename = pathinfo($filenameWithExt,PATHINFO_FILENAME);
    $extension = $file->getClientOriginalExtension();
    $fileToArray[] = strtolower(preg_replace('/[^A-Za-z0-9 _ .-]/', '', $request->prod_name)).'-'.generate_random_str(10).'.'.$extension;
    $implodeFile = implode(',', $fileToArray);
    $fileToStore = explode(',', $implodeFile);

    Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$initKey],50);
    $initKey++;
}
$insert = $this->productData($request);
$getInsertedId = DB::table('products')->insertGetId($insert);

for($i = 0; $i < count($fileToStore); $i++) {
   DB::table('product_image')->insert(['product_id' => $getInsertedId,'product_image' => $fileToStore[$i]]);
}