uniapp保存base64位图片
后端返回数据:
以前都是返回一个网络连接,第一次看到这样懵逼了,问了一下后端,是直接返回二进制流的。
遇到问题,当然打印一些(好家伙,我还以为乱码了!)
处理方法
1.修改返回数据类型(修改封装的接口的uni.request)
//设置响应的数据类型
responseType: 'arraybuffer'
2.转成base64位图片
3.用Bitmap生成临时图片
4.用uni.saveImageToPhotoAlbum保存图片
// res.data 假设位上方的乱码 (完成步骤1后不是乱码了 是arraybuffer类型)
let base64String = uni.arrayBufferToBase64(res.data)//将 ArrayBuffer 对象转成 Base64 字符串
let base64 = "data:image/png;base64," + base64String
const bitmap = new plus.nativeObj.Bitmap("test");
bitmap.loadBase64Data(base64, function() {
const url = "_doc/" + new Date().getTime() + ".png"; // url为时间戳命名方式
bitmap.save(url, {
overwrite: true, // 是否覆盖
// quality: 'quality' // 图片清晰度
}, (i) => {
uni.saveImageToPhotosAlbum({ //保存图片
filePath: url,
success: res => {
console.log("成功",res)
bitmap.clear()
}
});
}, (err) => {
console.log("失败",err)
bitmap.clear()
});
}, (err) => {
console.log("失败",err)
bitmap.clear()
});