记录项目中遇到的问题
1、uniapp请求文件流并转base64
uni.request({
url: appConfig.baseURL + '/xxx/xxxx/xxx',
data: {
scene: 'sceneType=0&id=' + item.id,
page: 'pages/index/index'
},
method: 'POST',
header: {
//添加请求头
Accesstoken: 'AccesstokenAccesstoken'
},
responseType: 'arraybuffer',
success: (res) => {
uni.hideLoading();
const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(res.data);
},
fail: (e) => {
uni.hideLoading();
console.error('获取XXX失败', e);
uni.showToast({
icon: 'none',
title: '获取XXX失败'
})
}
})
- 其中responseType需要设置为arraybuffer
- 通过uni.arrayBufferToBase64将文件流转为base64,此api需要注意兼容性
至此已经可以拿到base64了,如果不进行对图片微笑小程序分享,后面的可以不用看了
2、文件流或base64图片分享至微信聊天记录
//如果后台返回的是base64
base64ToTempFilePath(base64, (path) => {
uni.hideLoading();
wx.showShareImageMenu({
path: path
})
});
//如果后台返回的是文件流
arrayBufferToTempFilePath(buffer, (path) => {
uni.hideLoading();
wx.showShareImageMenu({
path: path
})
});
// base64转临时文件
export function base64ToTempFilePath(base64Data, success, fail) {
const fs = uni.getFileSystemManager()
const fileName = 'temp_image_' + Date.now() + '.png' // 自定义文件名,可根据需要修改
const filePath = uni.env.USER_DATA_PATH + '/' + fileName
const buffer = uni.base64ToArrayBuffer(base64Data.substring(base64Data.indexOf(',') + 1))
fs.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
success && success(filePath)
},
fail() {
fail && fail()
}
})
}
// ArrayBuffer转临时文件
export function arrayBufferToTempFilePath(buffer, success, fail) {
const fs = uni.getFileSystemManager()
const fileName = 'temp_image_' + Date.now() + '.png' // 自定义文件名,可根据需要修改
const filePath = uni.env.USER_DATA_PATH + '/' + fileName
fs.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
success && success(filePath)
},
fail() {
fail && fail()
}
})
}