Восстановить загрузку файла - ошибка 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);