【问题标题】:Retrieve binary data without using arraybuffer不使用 arraybuffer 检索二进制数据
【发布时间】:2014-03-16 14:53:28
【问题描述】:

我有以下资源:

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

var API = $resource(server + 'album', {}, {
    get: {
        url: server + 'album/:albumId/photo/:photoId',
        method: 'GET',
        responseType: 'arraybuffer',
        headers: {
            'AuthToken': 'the secret',
            'Accept': 'image/*'
        },
        interceptor: {
            response: function(resp) {              
                return 'data:'+ resp.headers('Content-Type') + ';base64,' + _arrayBufferToBase64(resp.data)};
            }
        }
    }
});

它的作用是从服务器接收文件的二进制内容并返回一个带有base64数据的数据uri。

我不得不说这个调用不能用一个简单的 src 标记替换为 url,因为也发送了一些身份验证标头。

这在较新的浏览器中可以正常工作,但我想保持与旧浏览器的兼容性,所以数组缓冲区在这里是一个问题,我的问题是:有没有办法在没有数组缓冲区的情况下完成所有这些?

我尝试删除响应类型并使用here 描述的内容转换 resp.data 中的字符串,但没有成功。

【问题讨论】:

  • 您可能需要检查这个相关问题。那里的一些答案可能会帮助您找到解决方案。 stackoverflow.com/questions/20617720/…
  • 您可以将二进制存储在一个字符串中,您可以通过在循环中对每个字符进行位移来处理 unicode 转换,就像您用来打包 AB 一样。谷歌“二进制 ajax”并查找旧示例。

标签: javascript angularjs


【解决方案1】:

看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding。我还没有测试过它们,但是有许多算法可以在字节数组和 base64 URI 之间进行转换。特别是 base64EncArray 函数似乎是您正在寻找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2015-06-26
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多