0
寻找一些newb NodeJS帮助。那里有一些简单的东西我可以忽略,但我试过这几种方式,并且不断得到奇怪的结果。无法使用Node.js读取和写入二进制数据
我从this question以下大部分代码。
// 128Kb Chunks
var targetSize = 131072;
// Open the file
fs.open('/project/input.png', 'r', function(err, fd) {
// Gather some info about the file
fs.fstat(fd, function(err, stats) {
var bufferSize=stats.size,
chunkSize=targetSize,
buffer=new Buffer(bufferSize),
bytesRead = 0,
isFinal = false;
while (bytesRead < bufferSize) {
if ((bytesRead + chunkSize) > bufferSize) {
chunkSize = (bufferSize - bytesRead);
isFinal = true;
} else {
isFinal = false;
}
fs.read(fd, buffer, bytesRead, chunkSize, bytesRead);
bytesRead += chunkSize;
if(isFinal) {
fs.writeFileSync("/project/output.png", buffer);
}
}
});
// Done
fs.close(fd);
});
当我输出的output.png文件,该文件具有相同的文件大小为我的输入(所以必须有所八九不离十工作?),我的图像浏览器无法读取该文件,因此它以某种方式损坏。
我试图保持这个问题,例如尽可能简单,但如果它的事项或提示进一步的意见,这里有我的核心目标:
- 阅读文件中固定的块大小(128KB)
- 加密并存储在MongoDB中每个块(这里故意除外)
- 以后能够重新组装上
我感谢所有帮助您可以给图像。
更新: 找到了答案,并预期它很简单。
我复制的代码有一个小的错误,即fs.close()
被读取之前它的流正被关闭。
这也是可见,当我添加了一个回调到我的fs.read,其中有一个 'ERR' 第一个参数:
[Error: EBADF, read] errno: 9, code: 'EBADF'
所有好的建议,我很感激他们,但正如你所警告的那样,他们对结果没有影响:\ \ – LukeChavers