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