你如何连接数据网址?

时间:2016-08-17 06:05:18

标签: javascript browser

我从文件中传输数据,在浏览器javascript中上传la javascript FileReader - parsing long file in chunks

基本上它通过以下方式读取文件:

var r = new FileReader()
var blob = file.slice(curPosition, curPosition+chunkSize); 
r.onload = function(e) {
  emit('data', e.target.result)
}
r.readAsDataURL(blob)

根据需要多次读取整个文件。

但是当我这样做时,我每次都会获得data-url前导码,然后是一堆base64数据。即使我删除了序言,简单的字符串连接也不起作用(文件最终被破坏)。

如何连接两个数据网址?或者真的,我认为这个问题归结为:你如何连接两个base64字符串?

或者,如何在纯JavaScript中构建数据网址?

3 个答案:

答案 0 :(得分:1)

如果要连接两个base64编码的字符串,请尝试以下方法:

var data1 = ..., data2 = ...; // base64 encoded
var bothData = atob(data1) + atob(data2); // binary string
var bothData64 = btoa(bothData); // base64 encoded

atob将base64转换为普通的旧(二进制)字符串,可以像往常一样连接。如果要将其转换回base64,请使用btoa。请参阅MDN article

如果您想将文件流式传输到data:网址,您还可以使用.readAsArrayBuffer(),连接结果(请参阅this),并将ArrayBuffer转换为base64(见this)。

答案 1 :(得分:1)

在nodejs中

    function joinBase64Strings(base64Str1, base64Str2) {
      const bothData = Buffer.from(base64Str1, 'base64').toString('binary') 
            + Buffer.from(base64Str2, 'base64').toString('binary');
      const joinedBase64Result = Buffer.from(bothData.toString(), 'binary').toString('base64');
      console.log('joinedBase64Result', joinedBase64Result);
      return joinedBase64Result;
    }

答案 2 :(得分:0)

您可以使用.readAsArrayBuffer()的{​​{1}},progressloadloadend个事件来创建新的FileReaderBlob对象,或者通过File

流式传输返回为.result的每个数据字节