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()
});