【问题标题】:cannot upload multiple image using vue.js in Laravel无法在 Laravel 中使用 vue.js 上传多个图像
【发布时间】:2020-12-01 03:38:00
【问题描述】:

我想在 laravel 中上传多张图片,因为我正在使用以下代码,但出现错误:

消息:“调用成员函数 getClientOriginalExtension() on 字符串

formData.append('gallery_img[]', this.form.gallery_img); 
uploadGalleryImg(e){
              
                var files = e.target.files;
                if (!files.length)
                    return;

                for (var i = files.length - 1; i >= 0; i--) {
                    this.form.gallery_img.push(files[i]);
                }
            },       

控制器:

 if (count(array($request->gallery_img))) {
        foreach ($request->gallery_img as $image) {
            $fileName = time().'.'.$image->getClientOriginalExtension();
            $image->move(public_path('img/gallery_img/'), $fileName);
        }
 }

【问题讨论】:

  • 我猜你的 this.form.gallery_img 不包含 File 实例。你能添加dd('$request->gallery_img)的输出吗?
  • @FabianBettag:当我控制 this.form.gallery_img.push 时,它会打印我上传的多个文件
  • 那些是File 的实例?可以加个截图吗?
  • 试试foreach ($request->file('gallery_img') as $image)
  • @FabianBettag:添加截图请查看

标签: laravel vue.js laravel-5 vuejs2


【解决方案1】:

试着让你的 foreach 像这样:

foreach ($request->gallery_img as $key => $image)

问题是 $image 被认为是一个字符串,所以我认为它是键,它的值是实际的图像。 如果这不起作用,并且您只想从文件名中获取扩展名,则可以使用带有“。”的explode native php函数。分隔符。

$explodedImage = explode(".",$image);
$extension = $explodedImage[count($explodedImage)-1]

【讨论】:

  • 当我 dd($request->gallery_img) 我得到 array:1 [ 0 => "[object File],[object File]" ]
  • 现在我收到此错误:消息:“调用字符串上的成员函数 move()”,...}
  • 确保您在表单中提供了 enctype="multipart/form-data"。您可以使用我的第二种解决方案来获取文件的扩展名。
  • 如果您在原始代码中更改它会怎样:$request->file('gallery_img') 而不是 $request->gallery_img
  • 您找到解决方案了吗?我有同样的问题
猜你喜欢
  • 2021-07-18
  • 2021-02-06
  • 2021-08-06
  • 2017-06-25
  • 2021-02-03
  • 2022-06-14
  • 2021-10-03
  • 2019-11-13
  • 2020-04-26
相关资源
最近更新 更多