我目前有一个类型为'image/jpeg'的blob,我需要将其转换为base64字符串。我所有的代码都是使用Nodejs在一个独立的javascript文件中,没有与任何html文件连接。我研究过的将blob转换为base64的每一种方法都涉及到使用FileReader类,这需要javascript位于html中,所以这是不可能的。我发现的唯一其他工作是使用这行代码将blob转换为缓冲区,然后转换为base64。
base64 = new Buffer( blob, 'binary').toString('base64');
但这只会返回错误:第一个参数必须是字符串、Buffer、ArrayBuffer、Array或类似数组的对象。
我被难倒了。有什么建议吗
3条答案
按热度按时间iugsix8n1#
如果你在NodeJS中使用node-fetch从URL阅读,你不想得到一个blob,而是一个buffer。然后,您可以轻松地转换为base64。
k75qkfdt2#
对于NodeJS(使用node-fetch),您可以使用
Buffer.from(await blob.text());
或Buffer.from(await blob.arrayBuffer());
从blob获取缓冲区。请注意,您的环境中可能还不支持
blob.arrayBuffer()
。这里可以使用
blob.text()
,因为Buffer.from
默认使用utf8。但是,您不需要从node-fetch获取blob。
您可以直接从响应中获取缓冲区。
还有来自斑点的信息。类型可以从响应头中获得。
例如,要获取数据url,请使用blob:
如果不使用blob:
也可以使用
Buffer.from(await response.arrayBuffer())
来获取缓冲区(in
toString('base64')
工作时必须使用Buffer.from
;如果没有它,您将得到"[object ArrayBuffer]"
)。7gs2gvoe3#
qrsngky的回答让我解决了自己的案子。转换
File
/Blob
,该File
是在sveltekit表单action中使用fetch
请求formData
发送的。FileReader
在sveltekit服务器端不可用,所以我需要转换它nodejs方式。在接收端,将File/Blob转换为base64的代码如下: