uniapp请求文件流并转base64; 文件流或base64图片分享至微信聊天记录

记录项目中遇到的问题

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()
		}
	})
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值