繁体   English   中英

如何从couchdb附件转换base64中的二进制数据

[英]how convert binary data in base64 from couchdb attachments

我尝试从我的couchdb服务器获取二进制数据。 但是我可以使用它们。 响应包含一个表示二进制数据的字符串,但是如果我尝试使用btoa函数在base64中进行编码,该函数将给我以下错误:

未捕获的InvalidCharacterError:'btoa'失败:要编码的字符串包含Latin1范围之外的字符。

我知道我可以直接在base64中编码数据,但是我不想要。

    $.ajax({
        url: "http://localhost:5984/testdb/7d9de7a8f2cab6c0b3409d4495000e3f/img",
        headers: {
                Authorization: 'Basic ' + btoa("name:password"),
        },
        success: function(data){
            /*console.log(JSON.parse(jsonData));
            console.log(imageData);*/
            document.getElementById("immagine").src = "Data:image/jpg;base64," + btoa(data);
            console.log(data);
        }
    });

任何想法?

从了解Base64字符串中的每个字符开始

var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');

代表一个数字 ,特别是从063 接下来,请考虑此数字范围是可以用6位写入的所有数字,并且我们通常考虑8位长的字节 二进制数据

现在我们可以得出结论,我们要实现的转换是8位整数到6位整数,看起来像这样

xxxxxx xxyyyy yyyyzz zzzzzz

其中每个字母描述该位位于哪个字节 ,空格描述6位整数之间的间隔。

一旦有了6位数字,我们就可以简单地转换为char并最终添加=符号(如果我们需要指示字节数不是3的倍数(它们也不只是0 ))

那么我们该怎么做呢?

var arr8 = 'foobar'; // assuming binary string

var i, // to iterate
    s1, s2, s3, s4, // sixes
    e1, e2, e3, // eights
    b64 = ''; // result
// some code I prepared earlier
for (i = 0; i < arr8.length; i += 3) {
    e1 = arr8[i    ];
    e1 = e1 ? e1.charCodeAt(0) & 255 : 0;
    e2 = arr8[i + 1];
    e2 = e2 ? e2.charCodeAt(0) & 255 : 0;
    e3 = arr8[i + 2];
    e3 = e3 ? e3.charCodeAt(0) & 255 : 0;
    // wwwwwwxx xxxxyyyy yyzzzzzz
    s1 =                     e1 >>> 2 ;
    s2 = ((e1 &  3) << 4) + (e2 >>> 4);
    s3 = ((e2 & 15) << 2) + (e3 >>> 6);
    s4 =   e3 & 63                    ;
    b64 += chars[s1] + chars[s2];
    if (arr8[i + 2] !== undefined)
        b64 += chars[s3] + chars[s4];
    else if (arr8[i + 1] !== undefined)
        b64 += chars[s3] + '=';
    else
        b64 += '==';
}
// and the result
b64; // "Zm9vYmFy"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM