寻找一些新的NodeJS帮助。有一些简单的东西我可以忽略,但我试图通过这几种方式,并不断得出奇怪的结果。
我从 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文件时,其文件大小与我的输入相同(因此必须使用某种东西?),我的图像查看器无法读取文件,因此它在某种程度上已损坏。
我尽量保持这个问题和示例尽可能简单,但如果重要或提示进一步的建议,这是我的核心目标:
感谢您提供的任何帮助。
更新 找到了答案,这很简单。
我复制的代码有一个小错误,即fs.close()
该流在被阅读之前正在关闭。
当我向我的fs.read添加一个回调时,这也是可见的,它有一个'错误的'第一个参数:
[Error: EBADF, read] errno: 9, code: 'EBADF'
答案 0 :(得分:0)
尝试更改行
while (bytesRead < bufferSize)
到
while (bytesRead < bufferSize && !isFinal)
我不知道是否会解决这个问题,但这是一个开始。
另外,为了提高效率,您不需要以下部分:
} else {
isFinal = false;
}
因为isFinal无论如何都是假的(你永远不会在这行中改变它)。