Laravel 5.4 文件上传错误 - 由于未知错误,文件名未上传

Laravel 5.4 file uploading error - fileName not uploaded due to an unknown error

我正在尝试通过 laravel 中的以下代码上传多张图片。在我的表单中,有 3 种类型的图像需要 select 上传。当用户select所有图片然后提交表单。我需要将所有图像上传到同一个文件夹。第一张图片上传到文件夹中。但随后它给了我以下错误。

The file "1575738164-main-slider2.webp" was not uploaded due to an unknown error.

控制器

  if ($request->hasFile('image') &&  $request->hasFile('image_575') && $request->hasFile('image_768')){

        $file = $request->image;
        $file_575 = $request->image_575;
        $file_768 = $request->image_768;

        $name = time().'-'.$file->getClientOriginalName();
        $name_575 = time().'-'.$file_575->getClientOriginalName();
        $name_768 = time().'-'.$file_768->getClientOriginalName();

        $names = [ $name , $name_575 , $name_768];

        foreach ( $names as $n){

            $file->move('uploads/banners/',$n);   
        }

        $banner = new Banner();
        $banner->name = $name;
        $banner->name_575 = $name_575;
        $banner->name_768 = $name_768;

        $banner -> side_color = $request -> side_color ;
        $banner->type = $request->type;
        $banner->save();
    }

请注意,我几乎已经完成了以下问题。 Laravel: 由于未知错误,文件未能上传

首先,仅使用time()方法无法始终为所有三个图像生成唯一的文件名,并且在并发请求发生时。

第二个:

    $names = [ $name , $name_575 , $name_768];

    foreach ( $names as $n){

        $file->move('uploads/banners/',$n);   
    }

你循环的是完全错误的。您正在尝试移动同一张图片 $file 三次。

您必须在循环内移动所有三个图像: `

    $file = $request->image;
    $file_575 = $request->image_575;
    $file_768 = $request->image_768;

`

所以,你可能应该这样做:

 $filesToMoves = [$name=> $file, $name_575 => $file2 , $name_768 => $file3];

foreach($filesToMoves as $fileName => $fileToMove){
        $fileToMove->move('uploads/banners/',$fileName);  
}

我将添加我的代码以供将来参考以解决此问题

public function store(Request $request)
{

    $this -> validate ( request () , [
        'image' => 'required|mimes:webp|dimensions:max_width=1200,max_height=380|max:50' ,
        'image_575' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=575,max_height=380|max:80' ,
        'image_768' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=768,max_height=380|max:80' ,
    ] ) ;

    if ($request->hasFile('image') &&  $request->hasFile('image_575') && $request->hasFile('image_768')){

        $fils = [$request->image, $request->image_575, $request->image_768];
        $formats = ['webp' , '575','768'];
        $fileNames = [];
        $i = 0;
            foreach($fils as $file){
                    $name = time().'_'.$formats[$i].'.'.$file->getClientOriginalExtension();
                    $file->move('uploads/banners/', $name);
                    array_push($fileNames, $name);
                    $i++;
            }

        $a= new X();
        $a->name = $fileNames[0];
        $a->image_575 = $fileNames[1];
        $a->image_768 = $fileNames[2];

        $a->save();
    }

这仅供参考。