正确解码获取Blob数据字符串到ArrayBuffer

时间:2016-08-24 15:39:45

标签: javascript jquery binary azure-storage

我有以下来自Azure存储的receives blob's data代码:

$.ajax({
        headers: {
            'x-ms-range': 'bytes=' + from + '-' + to,
            'x-ms-version': '2015-07-08',
            'x-ms-client-request-id': guid()
        },
        url: uri,
        type: "GET",
        success: function (data) {
            /* data is a string! */
        },
        error: function (error, textStatus) { }
});

呼叫正常,我以文本形式接收数据。 问题是我需要将其转换为ArrayBuffer

现在我尝试了很多方法,例如:

new TextEncoder().encode(data);

以及以下转换器:

function stringToUint(string) {
    var charList = string.split(''),
    uintArray = [];
    for (var i = 0; i < charList.length; i++) {
        uintArray.push(charList[i].charCodeAt(0));
    }
    return new Uint16Array(uintArray);
}

但数据字符串未正确转换为二进制(我已根据blob的实际二进制值进行了检查)。

我应该使用其他ArrayBuffer类型吗?或者我在使用TextEncoder进行转换时使用了错误的编码(我尝试过utf-8,utf-16,utf-32)?

请帮助:(

1 个答案:

答案 0 :(得分:1)

最终对我有用的是使用此here 并将请求更改为:

$.ajax({
        headers: {
            'x-ms-range': 'bytes=' + from + '-' + to,
            'x-ms-version': '2015-07-08',
            'x-ms-client-request-id': guid()
        },
        url: uri,
        type: "GET",
        dataType: 'binary',
        responseType:'arraybuffer',
        processData: false,
        success: function (data) {
            /* data is an arraybuffer! */
        },
        error: function (error, textStatus) { }
});

希望它能帮助其他人......