解析文件上传 - 500错误,套接字已关闭

时间:2016-01-29 10:28:58

标签: node.js restify

我使用restify api上传文件。

它给了我一个错误,

{
   "code": "InternalError",
    "message": "This socket is closed."
 }  

read api仍然可以正常运行,但无法上传图像。可能的问题是什么?

我正在使用的代码,

exports.uploadfile = function (req, res, next) {
  var file_name = req.files.image.name;                
  var file_name_arr = file_name.split('.');
  var imageExtension = file_name_arr.pop();
  var imageName = Date.now()+"."+imageExtension;
  var newPath = process.cwd() + "/images/" + imageName;

  fs.readFile(req.files.image.path, function (err, data) {
    fs.writeFile(newPath, data, function (err){
      if(err) return next(err);
      res.json({
        image: imageName
      })
      return next();
    });                
  });
}

1 个答案:

答案 0 :(得分:3)

在挖了一下之后,我在这里找到了答案。上面的代码将整个文件读入内存,然后将其写入缓慢的磁盘上。相反,我使用流媒体来编写像魅力一样的文件。

替换上面代码中的fs.readfile
rr = fs.createReadStream(req.files.image.path).pipe(fs.createWriteStream(imagePath))

rr.on('error', function(err){
   console.log(error)
});

rr.on('finish', function(){
   //do ur work here
});

参考链接:https://nodejs.org/api/stream.html

其他方法是使用比上面指定的方法更快的fs.rename,因为它根本不必读取文件。

fs.rename(req.files.image.path, new_file_path);