uni-app uni.arrayBufferToBase64 转换位base64错误

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app uni.arrayBufferToBase64 转换位base64错误

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 windows 10
HBuilderX类型 正式
HBuilderX版本 3.95
手机系统 Android
手机系统版本 Android 7.0
手机厂商 模拟器
手机机型 R11
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

const arrayBuffer = new Uint8Array(res.data)  
const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(res.data)

操作步骤:

const arrayBuffer = new Uint8Array(res.data)  
const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(res.data)

预期结果:

const arrayBuffer = new Uint8Array(res.data)  
const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(res.data)

实际结果:

const arrayBuffer = new Uint8Array(res.data)  
const base64 = "data:image/png;base64," + uni.arrayBufferToBase64(res.data)

bug描述:

responseType设置为arraybuffer在安卓上无效 在H5内有效,安卓转换出来的base64是错的


3 回复

看是什么数据转base64,这个插件是图片转base64,h5,app都有https://ext.dcloud.net.cn/plugin?id=13926


同问,,解决了吗

在使用 uni-app 进行开发时,如果你遇到 uni.arrayBufferToBase64 转换 ArrayBufferBase64 时出现错误,可能是由于以下几个原因导致的。以下是一些常见的排查步骤和解决方案:

1. 检查 ArrayBuffer 数据

确保你传入的 ArrayBuffer 数据是有效的。如果 ArrayBuffer 数据为空或格式不正确,转换时可能会出错。

let arrayBuffer = new ArrayBuffer(10); // 示例数据
if (arrayBuffer.byteLength === 0) {
    console.error('ArrayBuffer is empty');
    return;
}

2. 使用正确的 API

确保你使用的是 uni.arrayBufferToBase64 这个 API,并且传入的参数是 ArrayBuffer 类型。

let base64 = uni.arrayBufferToBase64(arrayBuffer);
console.log(base64);

3. 检查运行环境

uni.arrayBufferToBase64uni-app 提供的 API,确保你在支持该 API 的环境中运行代码。例如,某些小程序平台可能不支持该 API。

4. 处理异常

在转换过程中,可能会遇到异常情况,建议使用 try-catch 来捕获并处理异常。

try {
    let base64 = uni.arrayBufferToBase64(arrayBuffer);
    console.log(base64);
} catch (error) {
    console.error('Failed to convert ArrayBuffer to Base64:', error);
}

5. 使用替代方案

如果 uni.arrayBufferToBase64 在某些平台上不可用,你可以使用其他方法将 ArrayBuffer 转换为 Base64。例如,可以使用 btoaUint8Array 来实现转换。

function arrayBufferToBase64(buffer) {
    let binary = '';
    let bytes = new Uint8Array(buffer);
    let len = bytes.byteLength;
    for (let i = 0; i < len; i++) {
        binary += String.fromCharCode(bytes[i]);
    }
    return btoa(binary);
}

let base64 = arrayBufferToBase64(arrayBuffer);
console.log(base64);

6. 检查编码问题

确保 ArrayBuffer 中的数据是有效的二进制数据,并且没有编码问题。如果数据是文本,可能需要先进行适当的编码处理。

7. 更新 uni-app 版本

如果你使用的是较旧版本的 uni-app,可能存在一些已知的 bug。尝试更新到最新版本,看看问题是否得到解决。

8. 查阅官方文档

如果以上方法都无法解决问题,建议查阅 uni-app 的官方文档,或者查看相关的社区讨论,看看是否有其他开发者遇到类似的问题。

示例代码

以下是一个完整的示例代码,展示了如何将 ArrayBuffer 转换为 Base64

let arrayBuffer = new ArrayBuffer(10); // 示例数据
let view = new Uint8Array(arrayBuffer);
for (let i = 0; i < view.length; i++) {
    view[i] = i; // 填充一些数据
}

try {
    let base64 = uni.arrayBufferToBase64(arrayBuffer);
    console.log('Base64:', base64);
} catch (error) {
    console.error('Failed to convert ArrayBuffer to Base64:', error);
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!