需求
在uni-app项目开发中,需要将图片转成base64格式传递给后端一、uni-app是什么?
uni-app实现了一套代码,同时运行到多个平台,例如:iOS模拟器、Android模拟器、H5、微信开发者工具等等;
想了解更多网址:https://uniapp.dcloud.io/README
二、图片路径转成base64
1.引入插件
将下载好的插件引入到自己的项目中;
这个插件中有个两种方法:
一、pathToBase64()图像路径转换为base64
二、base64ToPath()图像base64保存为文件
插件地址:https://ext.dcloud.net.cn/plugin?id=123
代码如下(示例):
import {pathToBase64,base64ToPath} from '../../image-tools/index.js'
2.调用uni.chooseImage方法
通过uni.chooseImage方法获取到用户需要上传的图片路径,再将图像路径转换为base64。
uni.chooseImage方法详见:https://uniapp.dcloud.io/api/media/image?id=chooseimage
代码如下(示例):
const imageList: [],//存储图片路径用于图片展示
const baseImageList:[],//存储图片base64,用于上传后端
uni.chooseImage({
count: 6, //最多可以选择的图片张数
sizeType: ['compressed'], //original 原图,compressed 压缩图
sourceType: ['album','camera'], //album 从相册选图,camera 使用相机
//成功则返回图片的本地文件路径列表 tempFilePaths
success:(res) => {
this.imageList = this.imageList.concat(res.tempFilePaths);//成功后利用concat方法追加到imageList中
//循环遍历res.tempFilePaths将每一个图像路径转换为base64
for(var i=0;i<res.tempFilePaths.length;i++){
pathToBase64(res.tempFilePaths[i])
.then(path => {
this.baseImageList = this.baseImageList.concat(path);//成功后利用concat方法追加到baseImageList中
})
.catch(error => {
console.error(error)
})
}
}
})
效果图如下:
3.删除图片的方法
<view class="uni-uploader-body">
<view class="uni-uploader__files">
<block v-for="(image,index) in imageList" :key="index">
<view class="uni-uploader__file" style="position: relative;">
<!-- 删除的图标以及删除的 delimage方法传递的参数 -->
<uni-icons @click="delimage(image)" class="del" size="20" type="clear"></uni-icons>
<image class="uni-uploader__img" :src="image" :data-src="image" @tap="previewImage"></image>
</view>
</block>
<view v-show="imageList.length < 6" class="uni-uploader__input-box">
<view class="uni-uploader__input" @tap="chooseImage"></view>
</view>
</view>
</view>
//script中代码
delimage(index){
this.imageList.splice(index, 1);
this.baseImageList.splice(index,1);
},
总结
主要是那个image-tools插件好用,为了找到个图像转base64花费了不少时间。
在我的项目中有头像上传,存在单张图片的情况而uni.chooseImage方法返回的结果是数组对象所以获取结果需要如下:
this.avatar =res.tempFilePaths[0];//关键是[0]