1

当客户端发布块数据(文件的一部分)时,服务器端应将块插入文件。但是 fs.open 会截断文件。所以我不能用空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);
            });
        });
    });
});

有没有更好的方法来做到这一点?请告诉我,非常感谢。

4

2 回答 2

5

我知道这个问题可能有点过时了,但是我在尝试将源代码写入文件时遇到了同样的问题为了解决这个问题,我没有使用写入文件而是追加,例如:

  res.on('data', function (chunk) {
      fs.appendFile('body.txt', chunk, function (err) {
          if(err) throw err;
      });   

这对我来说很好

于 2013-09-01T10:31:55.010 回答
3

听起来您想将 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');
  });
};
于 2013-04-22T17:58:26.600 回答