Node Js FS没有写整个文件

时间:2016-04-26 10:59:54

标签: node.js express multipartform-data fs

我想将文件从客户端上传到服务器,然后将它们存储在与上传该特定文件的用户对应的文件夹中!代码似乎没问题,但问题似乎与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('/');
});

2 个答案:

答案 0 :(得分:1)

问题在于以下几点:

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写入文件时,它的对象表示就是所写的内容,即“对象,对象”' (15个月)。

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

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

希望这有帮助。

答案 1 :(得分:0)

试试这样:

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('/');
  });
});