gpt4 book ai didi

javascript - 使用node.js fs.writeFile写入二进制数据来创建镜像文件

转载 作者:IT老高 更新时间:2023-10-28 23:13:26 26 4
gpt4 key购买 nike

我正在尝试使用 node.js fs.writeFile 编写 Canvas 数据作为二进制。 JPEG 文件,但文件写入后我可以看到文件存储为纯文本,而不是二进制数据。

这是从客户端发送到我的 Node 的 data 示例,表示 JPEG 图像数据(仅几个前字符):

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAFA3PEY8MlBGQUZaVVBfeM...

我通过以下操作在客户端获取此 数据 :

canvas.toDataURL('image/jpeg', 0.5).replace('data:image/jpeg;base64,', '')

这是我的 node.js 服务器中的函数用法:

fs.writeFile('../some.jpeg', data, 'binary', function(err){});

不是将文件写入二进制文件(״״ JFIF ...),而是准确写入从客户端接收到的数据。

我在这里做错了什么?

最佳答案

JavaScript language had no mechanism for reading or manipulating streams of binary data. The Buffer class was introduced as part of the Node.js API to make it possible to interact with octet streams in the context of things like TCP streams and file system operations.

纯 JavaScript 虽然非常适合 Unicode 编码的字符串,但不能很好地处理直接的二进制数据。

当向套接字写入大量数据时,以二进制格式保存数据比从 Unicode 转换要高效得多。

var fs = require('fs');
// string generated by canvas.toDataURL()
var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0"
+ "NAAAAKElEQVQ4jWNgYGD4Twzu6FhFFGYYNXDUwGFpIAk2E4dHDRw1cDgaCAASFOffhEIO"
+ "3gAAAABJRU5ErkJggg==";
// strip off the data: url prefix to get just the base64-encoded bytes
var data = img.replace(/^data:image\/\w+;base64,/, "");
var buf = Buffer.from(data, 'base64');
fs.writeFile('image.png', buf, /* callback will go here */);

Reference

关于javascript - 使用node.js fs.writeFile写入二进制数据来创建镜像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com