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

Posted

技术标签:

【中文标题】Laravel 为单个项目上传多个文件并进行验证【英文标题】:Laravel multiple file upload for a single item with validation 【发布时间】:2019-08-01 19:01:01 【问题描述】:

我正在尝试使用 Laravel 和 Ajax 为单行上传多个文件。对于单个图像,效果很好,但是当我尝试上传多个图像时,总是出现错误:“文件必须是类型的文件:jpeg、png、bmp、gif、svg、docx、xlsx、pdf。” 我想做这样的事情:

id | client_id | files
---|-----------|------
1  | 1         | image.png, test.pdf
---|-----------|------
2  | 2         | imag3.png, test.docx

tasks.blade.php

<form method="post" id="addTask_form" name="addtask" enctype="multipart/form-data">
    ..........
            <div class="form-group">
                <label>File</label>
                 <input type="file" name="file[]" id="file" multiple />
            </div>

TasksController.php

$validation = Validator::make($request->all(), [
            'employee_id' => 'required',
            .......
            'file' => 'nullable|mimes:jpeg,png,bmp,gif,svg,docx,xlsx,pdf',    


            ]);

if($request->hasFile('file'))
               $image = $request->file('file');
               $data = [];
               foreach ($image as $img) 
                    $new_name = rand() . '.' . $img->getClientOriginalExtension();
                    $img->move(public_path('uploads'), $new_name);
                    $data[] = $new_name;



               $task = Task::find($request->get('task_id'));

            $task->employee_id = $request->get('employee_id');
            ..............
            $task->file = json_encode($data);   



            $task->save();
            
            

然后,我需要在我的数据表中将数组的每个值作为一个单独的字符串获取,以便它可以被点击。例如:

    id | client_id | files
    ---|-----------|------
    1  | 1         | 287319667.jpg | 2074802246.jpg
    ---|-----------|------
    2  | 2         | 2074802246.jpg | 2074802246.jpg

这是我的数据表列:

return Datatables::of($tasks)


       ->editColumn('link', function ($link) 

               return '<a href="public/uploads/'.$link->file.' >'.$link->file.'</a>';


        )

它返回完整的数组,如:["287319667.jpg","2074802246.jpg"] 所以,我需要这样显示:287319667.jpg | 2074802246.jpg.

提前谢谢你

【问题讨论】:

你检查过***.com/a/48636803/2201646 吗? 谢谢,它有效。我在我的数据库中得到 ["518393940.png","2009297784.png"]。 @Daniyal 我编辑了关于获取数组值的问题。你能帮帮我吗? 类似php.net/manual/en/function.implode.php ? 是的,我试图内爆,但它返回完整的数组([“287319667.jpg”,“2074802246.jpg”])我的代码:$files[] = $link->file; return ' 【参考方案1】:

如果你想验证多个文件,你所做的将适用于单个文件

'file.*' => 'required|file|mimes:xlsx,xls,csv,jpg,jpeg,****'

【讨论】:

以上是关于Laravel 为单个项目上传多个文件并进行验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 分别验证每个文件

在将多个文件上传到服务器之前验证多个文件上传中的单个文件

Laravel 5 & 在单个字段中验证多个电子邮件地址

Laravel 上传并验证 apk 文件

使用单个laravel实例的多个项目

如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7