当客户端发布一个块数据(文件的一部分)时,服务器端应该将块插入到文件中。但fs。打开将截断文件。所以我不能用空fd来写。现在这就是我正在使用的,它读取所有缓冲区并更改缓冲区中的块范围值。
//badly code
fs.open(getFilePath(fileId),"r+",function(err,fd){
var bytes = new Buffer(metadata.fileSize);
fs.read(fd,bytes,0,bytes.length,0,function(){
for(var i=0;i<bytes.length;i++){
if(i>=start && i <= end){
bytes[i] = buffer[i-start];
}
}
//console.log(bytes);
fs.write(fd,bytes,0,bytes.length,0,function(err){
if(err) throw err;
fs.close(fd,function(){
metadata.addChunk(start,end);
metadata.save(callback);
});
});
});
});
有更好的方法吗?请告诉我,非常感谢。
我知道这个问题可能有点过时了,但我在试图将源代码获取到文件时遇到了同样的问题为了解决这个问题,我没有使用写文件,而是使用追加,例如:
res.on('data', function (chunk) {
fs.appendFile('body.txt', chunk, function (err) {
if(err) throw err;
});
这对我来说很好
听起来像是要在文件中附加http请求。
打开一个追加写流。
var writeStream = fs.createWriteStream(path, {flags: 'a'});
在你的http处理程序
function (req, res) {
req.pipe(writeStream, {end: false});
req.on('end', function () {
res.end('chunk received');
});
};