代码之家  ›  专栏  ›  技术社区  ›  Kishan Rajdev

恢复文件上传-500错误,套接字已关闭

  •  2
  • Kishan Rajdev  · 技术社区  · 10 年前

    我正在使用restify api上传文件。

    这给了我一个错误,

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

    readapi仍然很好,但无法上传图像。可能的问题是什么?

    我使用的代码,

    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 回复  |  直到 10 年前
        1
  •  4
  •   Kishan Rajdev    10 年前

    经过一番挖掘,我找到了答案。上述代码将整个文件读入内存,然后将其写入速度较慢的磁盘。相反,我使用流媒体来编写文件,这就像一个魅力。

    替换fs。读取上述代码中的文件

    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);