当前位置:首页 » 文件管理 » vue上传图片并预览

vue上传图片并预览

发布时间: 2023-12-17 10:48:37

‘壹’ uniapp上传图片至服务器,获得在线图片链接预览(实战)

功能需求:
前端选择本地文件,将选择好的文件显示在界面上进行预览,可同时选择四张进行预览。

思路如下:
前端选择本地的png、jpg、等格式的图片,将图片以二进制的形式传到后端服务器,后端对二进制图片进行处理,返回给前端一个服务器链接在线图片,在浏览器就可以打开链接访问的那种。然后前端将这个图片链接渲染在页面进行预览。

首先
我们看一下uniapp的官方文档:
https://uniapp.dcloud.io/api/media/image?id=chooseimage

大概是这样的
先写一个模拟的demo
1:首先我是是用了colorUI的框架,在项目里面引入

在page底下的vue文件引入

这样一来,就不需要写什么样式了,直接使用写好的就行了。

效果是这样的
每次选完图片之后显示在页面上,我这里设置了最多可以选择四张,图片链接使用了临时的blob,接下来就要使用后端小伙伴给的接口,将自己本地的二进制文件传给他了。

在 chooseImage 选择好图片之后,写一个成功的回调函数,在回到函数里面添加一个图片上传的方法uploadFile,在方法里面添加url,等参数。

若是请求成功
则返回一个图片链接

添加接口之后 的,demo如下:

‘贰’ vue点击上传图片,vue上传oss,vue-cropper图片裁剪功能

很多刚入门的小伙伴上传图片都会使用现成的框架,然后根据框架提供的api进行上传,感觉这样是最简单的,其实上传图片是一个很简单的功能,

1.将input的设为透明然后定位到按钮上面,通过点击实现上传

2.点击按钮,通过处发input的点击事件后处发change,达到唤起上传图片的效果

先通过npm安装oss依赖

oss官方文档
1.前端拿到 accessKeyId,accessKeySecret直接上传oss
这种用法会直接暴露id及secret,相当于把自己家门的钥匙告诉别人,不推荐使用

2.通过后台转换,拿到对应的参数,进行上传

图片裁剪的插件,先通过npm安装依赖
vue-cropper 高版本解决在ios上图片拍照旋转问题

父组件

子组件,在项目components文件中新建一个cropper文件,在父组件中引入

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

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 width="100%" :src="imagePreviewUrl" alt="">

</el-dialog>

方法示例:

onExceed(files, fileList) { 

                this.$message({

                        type: 'info',

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

                        ration: 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,没有其他属性,比如文件大小,涉及到其他属性的函数都没办法调用)

热点内容
怎么桌面加密 发布:2025-05-09 04:26:36 浏览:861
obv算法 发布:2025-05-09 04:25:50 浏览:154
迷你世界上传视频 发布:2025-05-09 04:20:20 浏览:649
盐城江苏高性能服务器云服务器 发布:2025-05-09 04:18:51 浏览:242
怎么看电脑配置合不合理 发布:2025-05-09 04:17:21 浏览:328
minecraft服务器怎么创造 发布:2025-05-09 04:09:02 浏览:977
输入法怎么编写编译 发布:2025-05-09 04:09:00 浏览:732
巡察脚本 发布:2025-05-09 04:07:31 浏览:643
vim运行python 发布:2025-05-09 03:46:13 浏览:678
php写微博 发布:2025-05-09 03:46:11 浏览:210