uniapp开发安卓和ios播放base64音频(mp3,wav都可以),或者处理其它类型的base64数据成为url

废话不多,直接贴代码

javascript 复制代码
export const base64ToFile = (base64Str, fileName, callback) => {
	var index = base64Str.indexOf(',')
	var base64Str = base64Str.slice(index + 1, base64Str.length)

	plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
		fs.root.getFile(fileName, {
			create: true
		}, function(entry) {
			var fullPath = entry.fullPath;
			let platform = uni.getSystemInfoSync().platform
			if (platform == 'android') {
				var Base64 = plus.android.importClass("android.util.Base64");
				var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
				try {
					var out = new FileOutputStream(fullPath);
					var bytes = Base64.decode(base64Str, Base64.DEFAULT);
					out.write(bytes);
					out.close();
					callback && callback(entry.toLocalURL());
				} catch (e) {
					console.log(e.message);
				}
			} else if (platform == 'ios') {
				var NSData = plus.ios.importClass('NSData');
				var nsData = new NSData();
				nsData = nsData.initWithBase64EncodedStringoptions(base64Str, 0);
				if (nsData) {
					nsData.plusCallMethod({
						writeToFile: fullPath,
						atomically: true
					});
					plus.ios.deleteObject(nsData);
				}
				callback && callback(entry.toLocalURL());
			}
		})
	})
}

如何使用

这里替换成你自己的文件路径
javascript 复制代码
	import {
		base64ToFile
	} from "@/utils/tools.js"; // 这里替换成你自己的文件路径
自己更改好对应的文件类型然后就能使用了
javascript 复制代码
var base64 = "你的base64数据"
var fileName = (new Date()).valueOf() + '.wav'; // 我的base64是wav的音频,具体的格式自己写好
base64ToFile(base64,fileName,function(path){
	console.log('pathresult',path);
})

另外提一嘴,uniapp的createInnerAudioContext不支持直接播放base64,搞得脑袋大,因为有时候实时性要求很高,所以也不建议后端转成文件上传到oss然后再返回路径播放。

相关推荐
小tenten3 分钟前
js延迟for内部循环方法
开发语言·前端·javascript
TheLittleBoy4 分钟前
iPhone 16分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 16 Plus、iPhone 16 Pro、iPhone 16 Pro Max
ios·iphone·iphone16·苹果分辨率
幻影浪子10 分钟前
Web网站常用测试工具
前端·测试工具
暮志未晚Webgl22 分钟前
94. UE5 GAS RPG 实现攻击击退效果
java·前端·ue5
__不靠谱先生29 分钟前
uniapp uni-table合并单元格
uni-app
二川bro35 分钟前
Vue2 和 Vue3 区别 — 源码深度解析
前端
爱吃玉米的螃蟹39 分钟前
uniapp对tabbar封装,简单好用
uni-app
软件技术NINI1 小时前
vue组件通信,点击传值,动态传值(父传子,子传父)
前端·javascript·vue.js
暖锋丫1 小时前
echarts实现湖南省地图并且定时轮询
前端·javascript·echarts
余生逆风飞翔2 小时前
前端代码上传文件
开发语言·前端·javascript