【问题标题】:Substitute for Uint8Array in javascript?在javascript中替代Uint8Array?
【发布时间】:2021-05-10 01:02:05
【问题描述】:

由于我的javascript程序将使用FormData对象将文档上传到服务器,并且文档是base64格式,我需要将base64字符串转换为字节数组,这个链接似乎是正确的那:

Convert base64 string to ArrayBuffer:

function _base64ToArrayBuffer(base64) {
    var binary_string = window.atob(base64);
    var len = binary_string.length;
    var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes.buffer;
}

不幸的是,我的程序依赖于旧版本的 javascript,它没有定义 Uint8Array。 有谁知道是否有另一种方法来完成我想要的,或者是否有 Uint8Array 的替代方法可以使用?

谢谢

【问题讨论】:

    标签: javascript arrays base64


    【解决方案1】:

    不幸的是,您似乎无权访问 TypedArrays 及其缓冲区,因此您可以使用简单的数组。

    function _base64ToArray(base64) {
        var binary_string = window.atob(base64);
        var bytes = [];
        for (var i = 0; i < binary_string.length; i++) {
            bytes.push(binary_string.charCodeAt(i));
        }
        return bytes;
    }
    

    使用数组和缓冲区不一样,但我希望这能解决你的问题。

    【讨论】:

    • 感谢 DDomen,但不幸的是,当我得到以下信息时,我无法将从 _base64ToArray 返回的值传递给 FormData:无法在“FormData”上执行“附加”:参数 2 不是“Blob”类型。
    • 在通过 Ajax 发送之前,您需要将数组包装为 Blob,只需执行 request.send(new Blob(_base64ToArray(array)))
    • 还要检查ArrayBuffer是否可用,也可以用它替换Uint8Array。
    • @HankRearden 我看到了你的编辑,你应该直接传递数组,你是否也尝试过设置 blob 的选项?也许像这样new Blob(value2, { type: 'image/png' })?否则,您可以直接从_base64ToArraybinary_string 参数构建Blob,例如new Blob([ binary_string ], { type: 'image/png' })。另请参阅Blob MDN Reference
    • 谢谢,但是将代码更改为 requestBody.append(parameter.Name, new Blob(value2, { type: 'image/png' }), "hank.png");生成的文件包含类似 2552162552240167470737001010960960025525 的内容......只是一个数字序列。我猜这个 blob 只是不适用于 bytearrays,而只能用于 ArrayBuffer 和 TypesArrays :-(
    猜你喜欢
    • 2020-04-12
    • 2020-06-03
    • 2018-09-27
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多