Javascript 如何连接数据URL?

Javascript 如何连接数据URL?,javascript,browser,Javascript,Browser,我正在用浏览器javascript上传la文件中的数据流 基本上,它通过执行以下操作将文件分块读取: var r = new FileReader() var blob = file.slice(curPosition, curPosition+chunkSize); r.onload = function(e) { emit('data', e.target.result) } r.readAsDataURL(blob) 它会根据需要多次读取整个文件 但当我这样做时,每次都会得到数据u

我正在用浏览器javascript上传la文件中的数据流

基本上,它通过执行以下操作将文件分块读取:

var r = new FileReader()
var blob = file.slice(curPosition, curPosition+chunkSize); 
r.onload = function(e) {
  emit('data', e.target.result)
}
r.readAsDataURL(blob)
它会根据需要多次读取整个文件

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

如何连接两个数据URL?或者说,我认为这个问题可以归结为:如何连接两个base64字符串


或者,如何在纯javascript中构建数据url?

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

var data1 = ..., data2 = ...; // base64 encoded
var bothData = atob(data1) + atob(data2); // binary string
var bothData64 = btoa(bothData); // base64 encoded
atob
将base64转换为普通的旧(二进制)字符串,可以像往常一样进行连接。如果要将其转换回base64,请使用
btoa
。看


如果要将文件流式传输到
数据:
URL,还可以使用
.readAsArrayBuffer()
,连接结果(请参阅),并将
阵列uffer
转换为base64(请参阅)。

您可以使用
.readAsArrayBuffer()
进度
加载
loadend
FileReader事件,以创建新的
Blob
文件
对象,或通过
.readAsArrayBuffer(/*Blob或File object*/)在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;
    }

你能告诉我们更多的细节吗?@A.J.不小心提交了,伙计们,请保持你的状态。“我正在上传文件中的数据流”你说的“数据流”是什么意思?哪个元素?为什么会有不止一个
数据URI
?您是否试图在
HTMLMEDIALEMENT
中按顺序呈现多个文件?“我得到它的序言”什么是“序言”?@guest271314请阅读我在问题中包含的链接的顶部答案。答案是将一个文件切成小块,这样你的浏览器就不会锁定较大的文件。这是将其直接上载到浏览器页面的内存中,而不是服务器。是的,请阅读链接问题。不确定链接问题与连接
数据URL
s的关系如何?“流式数据”是什么意思?您是否可以包括您在问题中尝试过的
html
javascript
,JSIDLE或plnkr演示?
未能在“窗口”上执行“atob”:要解码的字符串未正确编码
两个数据的结果是什么?
data1
data2
必须只是
数据:
URL的base64部分,例如,没有
数据:foo/bar;base64,
这听起来效率太低了。请记住,我正在处理大文件(比如千兆字节)。不幸的是,您必须对base64进行解码才能将其连接起来。看见你可以将重新编码保存到最后,如果你只需要二进制数据,也可以跳过它;一个字节可以编码为多个base64字符。请参阅和了解base64的工作原理。我还编辑了我的问题。我只是把这个问题说得更清楚一点,但我的问题是关于浏览器方面的javascript@BT在浏览器中进行转换是不好的做法,在后端进行转换?你这是什么意思?我正在将数据从前端流到后端,因此不可能“在后端完成”。