Kob*_*uek 11 javascript binary node.js
我正在尝试使用node.js fs.writeFile作为二进制文件来编写画布数据.JPEG文件,但在写入文件后,我可以看到文件存储为纯文本,而不是二进制数据.
这是data从客户端发送到我的节点的示例,表示JPEG图像数据(只是几个第一个字符):
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAFA3PEY8MlBGQUZaVVBfeM...
我通过以下方式data 在客户端得到这个:
canvas.toDataURL('image/jpeg', 0.5).replace('data:image/jpeg;base64,', '')
Run Code Online (Sandbox Code Playgroud)
这是我的node.js服务器中的函数用法:
fs.writeFile('../some.jpeg', data, 'binary', function(err){});
Run Code Online (Sandbox Code Playgroud)
它不是将文件写为binary(????? JFIF ...),而是准确地写入从客户端收到的数据.
我在这做错了什么?
Ray*_*yon 29
Buffer语言没有用于读取或操纵二进制数据流的机制.该Buffer班介绍了作为Node.js的API的一部分,以使其能够与八位字节流中的东西像TCP流和文件系统操作的情况下进行交互.
纯Buffer,虽然Buffer字符串很好,但不能很好地处理直接二进制数据.
在向a写入大量数据时Buffer,以Buffer格式化数据和从必须转换的数据提高效率要高得多Buffer.
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 = new Buffer(data, 'base64');
fs.writeFile('image.png', buf);
Run Code Online (Sandbox Code Playgroud)
Yak*_* Ad 13
我有这个问题。我在“请求”库中将“编码”的默认值设为空时解决了问题
var request = require("request").defaults({ encoding: null });
var fs = require("fs");
fs.writeFile("./image.png", body, function(err) {
if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32987 次 |
| 最近记录: |