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