2016-09-19 143 views
0

上传图片API需要二进制流。我试过新的​​及其readAsBinaryString()方法,但它不起作用!似乎二进制字符串和二进制流是不一样的东西,所以我改变了我的方式,并试图readAsDataURL()方法(因为我需要预览图像),现在我想知道:如何使用JavaScript将base64转换为二进制流?

1)如何将base64转换为二进制流使用js

当我使用readAsBinaryString()的响应情况如下(数据A):

binary_string

但API需要像这样(数据B):

binary_stream

2 )有人知道如何将dataA(上图)转换为dataB(图下)?

+1

_“我我尝试过新的FileReade r()和它的* readAsBinaryString()*方法,但它不起作用!“_你是什么意思的”二进制流“? – guest271314

+0

当你说“它不工作” - 例如,你是否在控制台出现错误? –

+0

当你说api需要一个二进制流时,我很难相信api需要一个十六进制视图'(数据B)' - 哪一个是它? – Endless

回答

0

这是你如何转换的base64为二进制流

var base64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" 
 

 
fetch(base64) 
 
.then(res => { 
 
    console.log(res.body instanceof ReadableStream) 
 
})
注:在闪烁ATM这只作品中,可以使用 Screw-FileReader和网络流 - 填充工具把任何BLOB到 字节流如果你喜欢

但我真的觉得你想要做的是把一个base64变成一个blob(bina RY容器),然后将其上传到API为二进制(不为base64),如果这是真的,那么这只是一个Creating a Blob from a base64 string in JavaScript副本,然后将其与阿贾克斯将其发送到服务器

var base64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" 
 

 
fetch(base64) 
 
.then(res => res.blob()) 
 
.then(blob => { 
 
    console.log("here is your binary: ", blob) 
 

 
    // now upload it 
 
    fetch(api, {method: 'POST', body: blob}) 
 
})
的只是一个马瑟

获取的base64摆在首位真的是不切实际的,应使用arrayBuffer,或BLOB
比如你从画布上得到它之前处理 - 尝试使用canvas.toBlob,而不是toDataUrl

相关问题