重新上传文件 - 500 错误,套接字已关闭
restify file upload - 500 error, socket is closed
我正在使用 restify api 上传文件。
它给我一个错误,
{
"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();
});
});
}
经过一番挖掘,我在这里找到了答案。上面的代码将整个文件读入内存,然后写入磁盘,速度较慢。相反,我使用流式传输来编写文件,效果非常好。
将上面代码中的 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
});
参考link:https://nodejs.org/api/stream.html
其他方法是使用 fs.rename,它比上面指定的方法更快,因为它根本不需要读取文件。
fs.rename(req.files.image.path, new_file_path);
我正在使用 restify api 上传文件。
它给我一个错误,
{
"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();
});
});
}
经过一番挖掘,我在这里找到了答案。上面的代码将整个文件读入内存,然后写入磁盘,速度较慢。相反,我使用流式传输来编写文件,效果非常好。
将上面代码中的 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
});
参考link:https://nodejs.org/api/stream.html
其他方法是使用 fs.rename,它比上面指定的方法更快,因为它根本不需要读取文件。
fs.rename(req.files.image.path, new_file_path);