Node Js FS 不写入整个文件

Node Js FS not writing whole file

我想将文件从客户端上传到服务器,然后将它们存储在与上传该特定文件的用户对应的文件夹中!代码好像没问题,但是问题好像是fs相关的! Fs 只传输文件的 15 个字节。事实上,到目前为止,它只传输我尝试过的每种文件类型(图像和视频)的 15 个字节!到目前为止,这是我的代码,你能帮帮我吗?谢谢!

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();


app.post('/upload', multipartMiddleware, function(req, res){
  var file = req.files.thumbnail; // that's what I've named the html input element
  var stream = fs.createWriteStream(file.path);
  fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream);
  res.redirect('/');
});

这样试试:

app.post('/upload', multipartMiddleware, function(req, res){
    var file = req.files.thumbnail; // that's what I've named the html input element
    fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, file, function(err) {
      if(err) { 
        res.redirect('error_page');
        return console.log(err);
       }

      console.log("The file was saved!");
      res.redirect('/');
  });
});

问题出在这些行中:

var stream = fs.createWriteStream(file.path); fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream);

stream,不是'file.path'的文件内容。相反,它是一个流,您可以通过它写入 'file.path'.

例如:

var stream = fs.createWriteStream(file.path); stream.write('some content'); stream.end(); 当您使用它通过 fs.writeFile 写入文件时,它的对象表示就是写入的内容,即“[Object,Object]”(15 字节)。

您应该做的是从其他文件中读取内容,并将内容保存在字符串或缓冲区中,而不是流中:

var stream = fs.readFileSync(file.path); 然后写入目标文件。当然,如果您使用文件写入的异步模型,请记住仅在完成时重定向。顺便有个writeFileSync()API,通过它也可以同步写入

希望对您有所帮助。