Восстановить загрузку файла - ошибка 500, сокет закрыт

Я загружаю файл с помощью API Restify.

Это дает мне ошибку,

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

Чтение 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 ответ

Решение

Немного покопавшись, здесь я нашел ответ. Приведенный выше код читает весь файл в память, а затем записывает его на диск, который работает медленно. Скорее я использовал потоковую передачу, чтобы написать файл, который работает как шарм.

заменив 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);
Другие вопросы по тегам