vue2.x,element-ui 中上传图片组件(图片查看,已有图片渲染)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue2.x,element-ui 中上传图片组件(图片查看,已有图片渲染)相关的知识,希望对你有一定的参考价值。

参考技术A

1、基本标签结构

<el-upload name="picture" 

            :action="\'/api/image/upload?imageType=xxx" 

            accept=".jpg, .png"      

            list-type="picture-card" 

           :limit="1"    

           :file-list="filelists"

            :on-exceed="onExceed" 

            :before-upload="beforeUpload"  

            :on-preview="handlePictureCardPreview"      

            :on-success="imagesuccess"   

            :on-remove="handleRemove">

            <i class="el-icon-plus"></i>  

 </el-upload>

<!--预览-->

<el-dialog :visible.sync="imgPreviewVisible" size="full" :modal="false" title="预览">

                <img :src="imagePreviewUrl" >

</el-dialog>

方法示例:

onExceed(files, fileList)  

                this.$message(

                        type: \'info\',

                        message: \'最多只能上传一个图片\',  

                        duration: 6000

                );

,

beforeUpload(file)

                const isJPG = file.type === \'image/jpeg\';  

                const isGIF = file.type === \'image/gif\';  

                const isPNG = file.type === \'image/png\';

                const isBMP = file.type === \'image/bmp\'; 

                const imgSizeLimit= file.size  < 1*1024*1024;

                if (!isJPG && !isGIF && !isPNG && !isBMP)

                     this.$message.error(\'上传图片必须是JPG/GIF/PNG/BMP 格式!\'); 

               

                if (!imgSizeLimit)  

                        this.$message.error(\'上传图片大小不能超过 1MB!\');

               

                return (isJPG || isBMP || isGIF || isPNG) && imgSizeLimit;                                                                                                                           , 

handlePictureCardPreview:function(file)

        //todo

 ,

imagesuccess:function(response, file, fileList)

         //todo

         this.filelists  = [];

          this.filelists  = [file]

 ,

handleRemove:function(file, fileList)

           //todo

 ,


2、action为后台上传图片接口

      file-list为文件列表

      limit为设置的可上传文件的最大个数

      onExceed上传的文件个数超出设定时触发的函数,参数为上传的文件file和文件列表 filelists  

      beforeUpload文件上传前执行,参数为上传的文件file,如果返回false或者返回Primary且被reject,则停止上传

      handlePictureCardPreview图片预览时触发,参数为上传的文件file,

      imagesuccess图片上传成功时触发参数response, file, filelists  

      handleRemove移除图片时触发,参数为file, filelists  

3、已有图片渲染问题:

自己在实际开发过程中,会遇到编辑情况,并且已经存在一张图片,想要放到图片组件中,可以调用组件里声明的方法。

由于是新手,组件使用不熟练,所以我将图片的显示与上传等操作分离,单独自己去展示,上传时再使用组件上传,使用组件的:show-file-list="false"属性来隐藏组件自带的图片展示功能。

后来发现自己可以自己初始化filelists列表,来使已存在的图片文件放入组件中,放入的对象当然时文件,但是我后台只有图片地址,如何拼出一个file格式对象来呢?通过debug,我发现上传的文件格式对象有好多属性,当然,存在url这个属性就可以通过组件进行展示。最简单的一种方式就是直接创建一个只有一个url属性的对象var file =     url:this.showDetailForm.profilePhotoPath        this.filelists.push(file)  然后push到文件列表,就可以在组件中进行渲染,对图片的操作可以使用声明的方法+表单属性来实现业务的全过程(当然,这样渲染的文件只有url,没有其他属性,比如文件大小,涉及到其他属性的函数都没办法调用)

以上是关于vue2.x,element-ui 中上传图片组件(图片查看,已有图片渲染)的主要内容,如果未能解决你的问题,请参考以下文章

基于element-ui封装上传图片到腾讯云Cos组件

Element-ui上传图片按顺序展示

vue 借用element-ui实现头像上传 axios发送请求

Element-ui上传组件http-request用法

node存储element-ui上传的图片

如何上传图片到七牛云