Node.js 多个同时上传
Node.js multer simulanteous uploads
正在尝试运行一个从平板电脑上传文档的系统。
使用 multer 和 express 4.
同时使用 2 或 3 个设备时一切正常,但是当添加更多设备时,文件名问题就出现了。 Multer 为所有上传提供了相同的文件名(正在观看 console.log(storedFile + " " + idPatient);
)。可能哪里做错了,但不知道具体是什么。
app.post("/api/Upload", jsonParser, function(req, res) {
var saveFilename = "",
savePath = "",
savePathForSql = "",
fileToSave = "";
var idDocument = 0,
idPatient = 0,
idDoctor = 0;
var uploadRequest = "";
var f = "queryLog.txt";
async.series([
function(callback) {
upload = multer({ storage: Storage }).single("imgUploader");
upload(req, res, function(err) {
if (err) {
console.log(err);
return res.end("Something went wrong!");
}
fileToSave = storedFile;
uploadRequest = req;
idDocument = JSON.parse(req.body.json)['id_doc_type'];
idPatient = JSON.parse(req.body.json)['id_patient'];
idLogin = JSON.parse(req.body.json)['id_login'];
mv("Images" + separator + fileToSave, idPatient + ".jpg", function(err) {
if (err) {
console.log(err);
} else {
return res.end("File uploaded sucessfully! ");
}
});
console.log(storedFile + " " + idPatient);
callback();
});
},
function(callback) {
var request = new sql.Request()
var q1 = "exec storedproc";
request.query(q1, (err, result) => {
if (err) return callback(err);
console.log(result.recordset[0]);
savePath = result.recordset[0]['path'];
savePathForSql = savePath;
if (os != 'linux') {
savePath = savePath.replaceAll("/", "\");
}
if (!fs.existsSync(f)) {
fs.writeFileSync(f, q1 + "\r\n", 'utf-8');
} else {
fs.appendFileSync(f, q1 + "\r\n", 'utf-8');
}
saveFilename = result.recordset[0]['filename'];
console.log(savePath + "/" + saveFilename);
callback();
})
},
function(callback) {
mkdirp(basePath + savePath, function(err) {
mv("Images" + separator + idPatient + ".jpg", basePath + savePath + separator + saveFilename, function(err) {
if (err) {
console.log(err);
console.log("Move failed: Images/" + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename);
} else {
console.log('Move complete. Images/' + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename);
return res.end("File uploaded sucessfully! ");
}
});
});
callback();
}
], function(err) {
var request2 = new sql.Request()
var q2 = "exec storedproc";
request2.query(q2, (err2, result2) => {
if (err2) return callback(err2);
if (err2) {
console.log(err2);
}
});
});
});
多重配置为:
Storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, "./Images");
},
filename: function(req, file, callback) {
storedFile = file.fieldname + "_" + Date.now() + "_" + file.originalname + randomInteger(99999) + ".jpg"
callback(null, storedFile);
}
});
Multer 将文件信息添加到 request 对象。
req.file
从
检索上传的图片路径
req.file.path
你的全局存储变量 storedFile 是你的绊脚石。更新您的代码以使用图像路径字符串:
mv( req.file.path , idPatient + ".jpg", function(err) {
正在尝试运行一个从平板电脑上传文档的系统。 使用 multer 和 express 4.
同时使用 2 或 3 个设备时一切正常,但是当添加更多设备时,文件名问题就出现了。 Multer 为所有上传提供了相同的文件名(正在观看 console.log(storedFile + " " + idPatient);
)。可能哪里做错了,但不知道具体是什么。
app.post("/api/Upload", jsonParser, function(req, res) {
var saveFilename = "",
savePath = "",
savePathForSql = "",
fileToSave = "";
var idDocument = 0,
idPatient = 0,
idDoctor = 0;
var uploadRequest = "";
var f = "queryLog.txt";
async.series([
function(callback) {
upload = multer({ storage: Storage }).single("imgUploader");
upload(req, res, function(err) {
if (err) {
console.log(err);
return res.end("Something went wrong!");
}
fileToSave = storedFile;
uploadRequest = req;
idDocument = JSON.parse(req.body.json)['id_doc_type'];
idPatient = JSON.parse(req.body.json)['id_patient'];
idLogin = JSON.parse(req.body.json)['id_login'];
mv("Images" + separator + fileToSave, idPatient + ".jpg", function(err) {
if (err) {
console.log(err);
} else {
return res.end("File uploaded sucessfully! ");
}
});
console.log(storedFile + " " + idPatient);
callback();
});
},
function(callback) {
var request = new sql.Request()
var q1 = "exec storedproc";
request.query(q1, (err, result) => {
if (err) return callback(err);
console.log(result.recordset[0]);
savePath = result.recordset[0]['path'];
savePathForSql = savePath;
if (os != 'linux') {
savePath = savePath.replaceAll("/", "\");
}
if (!fs.existsSync(f)) {
fs.writeFileSync(f, q1 + "\r\n", 'utf-8');
} else {
fs.appendFileSync(f, q1 + "\r\n", 'utf-8');
}
saveFilename = result.recordset[0]['filename'];
console.log(savePath + "/" + saveFilename);
callback();
})
},
function(callback) {
mkdirp(basePath + savePath, function(err) {
mv("Images" + separator + idPatient + ".jpg", basePath + savePath + separator + saveFilename, function(err) {
if (err) {
console.log(err);
console.log("Move failed: Images/" + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename);
} else {
console.log('Move complete. Images/' + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename);
return res.end("File uploaded sucessfully! ");
}
});
});
callback();
}
], function(err) {
var request2 = new sql.Request()
var q2 = "exec storedproc";
request2.query(q2, (err2, result2) => {
if (err2) return callback(err2);
if (err2) {
console.log(err2);
}
});
});
});
多重配置为:
Storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, "./Images");
},
filename: function(req, file, callback) {
storedFile = file.fieldname + "_" + Date.now() + "_" + file.originalname + randomInteger(99999) + ".jpg"
callback(null, storedFile);
}
});
Multer 将文件信息添加到 request 对象。
req.file
从
检索上传的图片路径req.file.path
你的全局存储变量 storedFile 是你的绊脚石。更新您的代码以使用图像路径字符串:
mv( req.file.path , idPatient + ".jpg", function(err) {