无法在 Laravel 中使用 vue.js 上传多个图像

Posted

技术标签:

【中文标题】无法在 Laravel 中使用 vue.js 上传多个图像【英文标题】:cannot upload multiple image using vue.js in Laravel 【发布时间】: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)的输出吗? @F***Bettag:当我控制 this.form.gallery_img.push 时,它会打印我上传的多个文件 那些是File 的实例?可以加个截图吗? 试试foreach ($request->file('gallery_img') as $image) @F***Bettag:添加截图请查看 【参考方案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 您找到解决方案了吗?我有同样的问题

以上是关于无法在 Laravel 中使用 vue.js 上传多个图像的主要内容,如果未能解决你的问题,请参考以下文章

无法在 laravel 中使用 vue.js 显示存储目录中的图像

将 Vue.js 安装到 Laravel 后无法加载示例组件

Vue js 无法在 Laravel 5.4 中渲染组件

如何在 Vue JS 中使用 Laravel 进行身份验证,以便用户在没有登录的情况下无法从 URL 进入他的页面

Laravel + Vue.js 应用程序路由无法正常工作

无法在 Vue.js(laravel 项目)中创建新的实例属性