【问题标题】:Upload multiple images in Vue.js and Laravel在 Vue.js 和 Laravel 中上传多张图片
【发布时间】:2021-08-06 16:11:12
【问题描述】:

我正在尝试在 vue.js 和 laravel 中一次上传多个文件,我使用的代码是:

Vue.js 代码:

 <input type="file" v-validate="'required'" multiple @change="uploadDegree" name="uploadDegree" placeholder="Upload Degree"/>

  uploadDegree(e)
            {
                for (let file of e.target.files) {
                    try {
                        let reader = new FileReader();
                         reader.onloadend = file => {
                         this.user.degree_attachment= reader.result;
                        };
                        reader.readAsDataURL(file);                      
                    } catch {}
                }
              }

Laravel 代码:

 $files = $request->input('degree_attachment');
           foreach($files as $file) {
               $degreename = time() . '.' . explode('/', explode(':', substr($file, 0, strpos($file, ';')))[1])[1];
                $pathDegreeExist = public_path("img/degree_img/"); 
                if(!File::exists($pathDegreeExist)) File::makeDirectory($pathDegreeExist, 777);
                $img = \Image::make($file);
                $img->save(public_path('img/degree_img/').$degreename); 
                $newUser->degree_attachment = $degreename;
            }

我收到此错误:

Invalid argument supplied for foreach()

我要在哪里获取图像,

【问题讨论】:

  • $files = $request-&gt;file('degree_attachment'); 不是input()file
  • @KamleshPaul:尝试过但仍然出现同样的错误
  • 您以 base64 格式发送?它应该是this.user.degree_attachment.push(reader.result) 然后它将是数组,你可以循环
  • @KamleshPaul:我试过你的代码,但它仍然给我Invalid argument supplied for foreach()

标签: laravel vue.js laravel-5


【解决方案1】:

有两个问题,评论中提到的一个

我在你的 vue 代码中注意到另一个,你每次都用文件内容覆盖变量this.user.degree_attachment,所以首先它不是多次上传,其次它的类型不会是一个数组,所以 laravel 控制器不会知道如何处理因此Invalid argument supplied for foreach() 仅仅是因为它不是迭代对象类型。

好吧,我没有在 laravel 部分尝试过,我在 sandbox 中测试了 vue,控制台将每个文件的内容记录为数组项,但这通常是由您的 laravel 验证触发的。

   uploadDegree(e) {
      let a = [];
      for (let file of e.target.files) {
        try {
          let reader = new FileReader();
          reader.onloadend = (file) => {
            a.push(reader.result);
          };
          reader.readAsDataURL(file);
          this.degree_attachment = a;
        } catch {}
      }
      console.log(this.degree_attachment);
    },

【讨论】:

  • 试过还是得到Invalid argument supplied for foreach()
  • 返回或转储 $files ,它的类型是什么?它不是可迭代的吗??
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 2021-12-22
  • 1970-01-01
  • 2019-09-05
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多