问题描述:

例如这种图片地址:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxxxxxxx

如果直接用 uni.downloadFile() 方法下载,会出现在安卓手机没后缀的情况,uni.saveImageToPhotosAlbum 保存到相册无法查看。

iOS 有后缀
image.png

安卓没有后缀image.png

安卓端保存后文件如下,在相册无法找到
image.png

解决方法:

新建一个@/uitls/base64DowImg.js 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
export function base64DowImg(base64) {
// 创建一个Bitmap是原生图片对象
const bitmap = new plus.nativeObj.Bitmap("test");
return new Promise((resolve, reject) => {
// 使用loadBase64Data将base64字符串转换为bitmap文件对象
bitmap.loadBase64Data(base64, () => {
const url = "_doc/" + new Date().getTime() + ".png"; // url为时间戳命名方式
// 再调用bimap.save方法,将图片文件存入手机存储
bitmap.save(
url,
{
overwrite: true, // 是否覆盖
},
(i) => {
//在这里使用文档说的保存到手机相册的方法
uni.saveImageToPhotosAlbum({
filePath: url,
success: function () {
resolve({
code: 0,
msg: "图片保存成功",
filePath: url,
});
bitmap.clear();
},
fail: function (err) {
resolve({
code: 1,
msg: "图片保存失败",
filePath: "",
});
},
});
},
(e) => {
resolve({
code: 1,
msg: "图片保存失败",
filePath: "",
});
bitmap.clear();
}
);
});
});
}

页面中使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import chooseFile from "@/utils/chooseFile.js";

let qrUrl =
"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxxxxxxx";
uni.request({
url: qrUrl,
method: "GET",
responseType: "arraybuffer",
success: async (res) => {
let base64 = uni.arrayBufferToBase64(res.data); // 把arraybuffer转成base64
base64 = "data:image/jpg;base64," + base64;
try {
let dowRes = await base64DowImg(base64);
uni.showToast({
title: dowRes.msg,
});
} catch (error) {
uni.showToast({
title: error.msg,
});
}
},
});