首页 > 解决方案 > Laravel 5.4 文件上传错误 - 由于未知错误导致文件名未上传

问题描述

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

由于未知错误,文件“1575738164-main-slider2.webp”未上传。

控制器

  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:由于未知错误,文件未上传

标签: laravelimagefileupload

解决方案


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

第二:

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

    foreach ( $names as $n){

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

你循环的内容是完全错误的。您正尝试将同一图像 $file 移动 3 次。

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

    $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);  
}

推荐阅读