简介

1
2
3
4
5
图片多以base64字符串的形式存储在数据库中,但是我们在平时使用url进行请求。

最终的归宿是字符串存储,但是我们估计开发为了方便使用url。

刚开始都自己写,搞了这么个存储方式,现更换成url,但是记录一下这个方法。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 首先在js页面引入脚本文件

// 将接口获取的头像临时链接转为 base64 内容
base64(url, type) {
return new Promise((resolve, reject) => {
wx.getFileSystemManager().readFile({
filePath: url, //选择图片返回的相对路径
encoding: 'base64', //编码格式
success: res => {
resolve(res.data)
},
fail: res => reject(res.errMsg)
})
})
},


// 调用方式
this.base64(e.detail.avatarUrl, "png").then(res => {
var temp_string = 'data:image/png;base64,' + res
this.data.upload_photo = temp_string
})

脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'zhiyuexing_lzzzzteam'; //自定义文件名

function base64src(base64data, cb) {
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
if (!format) {
return (new Error('ERROR_BASE64SRC_PARSE'));
}
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
const buffer = wx.base64ToArrayBuffer(bodyData);
fsm.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
cb(filePath);
},
fail() {
return (new Error('ERROR_BASE64SRC_WRITE'));
},
});
};
module.exports = base64src;