无限循环上传文件multer / express和文件大小= 0 Ko

时间:2017-06-10 19:33:37

标签: angularjs node.js

我试图在Web应用程序上上传excel文件。 但是当我上传我的文件时,Web应用程序上有一个inifnite循环,但文件已正确上传,这里是代码:

更新

节点:

var storage = multer.diskStorage({
  destination: function(req,file,cb) {
    cb(null,'/uploads/')
  },
  filename: function(req,file,cb) {
    cb(null, file.originalname);
  }
});

var upload = multer({ storage : storage });

app.post('/upload', upload.single('file'), function(req,res) {
  var tmp_path = req.file.path;
  var target_path = './uploads/'+req.file.originalname;
  var source = fs.createReadStream(tmp_path);
  var dest = fs.createWriteStream(target_path);
  var stream = source.pipe(dest);
  stream.on('finish', function() {
     res.send();
    });
});

Angular:

$scope.uploadFile = function() {
  var file = $scope.myFile;
  var uploadUrl = "/upload";
  var fd = new FormData();
  fd.append('file',file);
}

$http.post(uploadUrl,fd,{
     headers: {'Content-Type' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}
});

使用Pierre Emmanuel Lallemant提出的解决方案,没有更多的无限循环,但上传后文件已损坏,其大小为0 Ko而不是850 Ko。

2 个答案:

答案 0 :(得分:0)

要检测文件是否已保存,以下代码应该有效:

dest.on('finish', function() {  
  res.send();
});

这一定必须有效:

source.pipe(dest).on('finish', function() {  
  res.send();
});

callback to handle completion of pipe

答案 1 :(得分:0)

我正在使用multer,所以我没有编写所有进程的代码。

我只是这样做:

app.post('/upload', upload.single('propt'), function (req, res) {
    res.send();
});