在 Laravel 中上传多个文件

Posted

技术标签:

【中文标题】在 Laravel 中上传多个文件【英文标题】:Upload multiple files in Laravel 【发布时间】:2021-05-13 19:45:50 【问题描述】:

我想一次上传多张图片,但它不起作用。

刀片/视图

<form action=" url('admin/image/upload') " method="POST"enctype="multipart/form-data">
@csrf
    <td><input type="text" name="Fields[0][title]" placeholder="Enter title" class="form-control" /></td>  
    <td><input type="file" name="Fields[0][image]" class="form-control" /></td>
</form>

控制器

$request->validate([
            'Fields.*.title' => 'required|max:25|min:5',
            'Fields.*.image' => 'required',
        ]);
           if($request->hasFile('image'))
            
            $file=$request->file('image');
            $file_name=hexdec(uniqid());
            $ext=strtolower($file->getClientOriginalExtension());
            $file_full_name=$file_name.'.'.$ext;
            $upload_path='image/';
            $file_url=$upload_path.$file_full_name;
            $success=$file->move($upload_path,$file_full_name);
        $Fields['image']=$file_url;
       foreach ($request->Fields as $key => $value) 
            images::create($value);
        
     
         return back()->with('success', 'Image Has Been Saved Successfully.');

【问题讨论】:

检查这一行if($request-&gt;hasFile('image')),你没有任何名为image的文件 我应该写什么? 我觉得你这里不需要动态字段,把name="Fields[0][image]"改成name="image" 我需要动态字段。 如果您接受我的回答,您将获得图像和字段输入数组,您应该通过 "foreach ($request->file('image') as $img) echo $img 访问" 【参考方案1】:

请按照以下回答:

刀片文件

<form action=" url('admin/image/upload') " method="POST"enctype="multipart/form-data">
@csrf
    <td><input type="text" name="Fields[]" placeholder="Enter title" class="form-control" multiple /></td>  
    <td><input type="file" name="image[]" class="form-control" multiple /></td>
</form>

管理员

$request->validate([
    'Fields.*' => 'required|max:25|min:5',
    'image.*' => 'required',
]);
   if($request->hasFile('image'))
    
        // dd($request->image) 
foreach ($request->image as $file) 

    dd($file)   
    //get filename with extension
    $filenamewithextension = $file->getClientOriginalName();
    //get filename without extension
    $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
    //get file extension
    $extension = $file->getClientOriginalExtension();
    //filename to store
    $filenametostore = $filename . '_' . time() . '.' . $extension;


 return back()->with('success', 'Image Has Been Saved Successfully.');

【讨论】:

我收到一个错误“调用数组上的成员函数getClientOriginalExtension() 通过 dd() 测试,然后一步一步进行 我复制粘贴了这个。 复制,过去,由 dd() 测试 你在dd()函数中没有得到任何数据吗?

以上是关于在 Laravel 中上传多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用laravel在数据库中上传多个文件

在Laravel 4中上传多个文件

在 Laravel 5.8.38 中上传多个文件时数组到字符串的转换错误

laravel 5.7 中的多个文件上传问题

Laravel 为单个项目上传多个文件并进行验证

如何防止在laravel中上传相同的文件