我正在构建的应用程序允许用户发布广告。广告允许上传多张图片。我正在尝试将每个用户上传的图像放入相应的文件夹中,该文件夹的名称为正插入到mongodb中的广告的_id的文件夹名。
这是路线代码;
var express = require('express');
var router = express.Router();
var request = require('request');
var mv = require('mv');
var fsex = require('fs-extra')
var fs = require('fs');
var mkdirp = require('mkdirp');
var path = require('path');
var Ad = require('../models/ad.model.js');
var multer = require('multer');
var storage = multer.diskStorage({
destination: 'public/images/',
filename: function (req, file, callback) {
callback(null, file.fieldname + Math.random() + path.extname(file.originalname));
}
});
var upload = multer({ storage: storage });
/* GET users listing. */
router.get('/', function (req, res) {
res.render('adreqform');
});
router.post('/', upload.array('img_', 3), function (req, res) {
if (req.session.loggedIn) {
var dateObj = new Date();
var locale = "en-us";
var month = dateObj.toLocaleString(locale, { month: "long" });
var datee = dateObj.getUTCDate();
var year = dateObj.getUTCFullYear();
var day = dateObj.getDay();
var displaydate = datee + " " + month + " " + year;
var ad = {
heading: req.body.heading,
deliverby: req.body.date,
metal: req.body.metal,
weight: req.body.weight,
unit: req.body.unit,
opdesc: req.body.opdesc,
userobjid: req.session.user._id,
username: req.session.user.username,
deliverydate: req.body.date,
creationdate: new Date(),
displaydate: displaydate,
approvaldate: "Null",
imgdest: "Null"
}
var newad = new Ad(ad);
newad.save(function (err, newad) {
if (err) {
console.log(err);
} else {
Ad.findOne({}, {}, { sort: { 'creationdate': -1 } }, function (err, latestad) {
global.latestad = latestad._id
mkdirp('/Users/mesam/source/repos/JewelryMP/JewelryMP/public/images/' + global.latestad, function (err) {
if (err) console.error(err)
else {
fs.rename('public/images/img_.jpg', 'public/images/' + global.latestad + '.jpg', function (err) {
if (err) console.log('ERROR: ' + err);
else {
fsex.move('/Users/mesam/source/repos/JewelryMP/JewelryMP/public/images/' + global.latestad + '.jpg', '/Users/mesam/source/repos/JewelryMP/JewelryMP/public/images/' + global.latestad + '/img.jpg', function (err) {
if (err) return console.error(err)
else {
Ad.findByIdAndUpdate(latestad, { imgdest: '/Users/mesam/source/repos/JewelryMP/JewelryMP/public/images/' + global.latestad + '/img.jpg' }, { new: true }, function (err, w) {
if (err) { console.log(err) }
else {
console.log('checkimgdest');
}
});
}
})
}
});
}
});
});
res.redirect('/');
}
});
}
else console.log('User was not found');
});
router.get('/profile', function (req, res) {
});
module.exports = router;
上面的代码创建带有广告_id的文件夹,还将3张照片上传到目录public / images中。我无法弄清楚的是,然后我知道知道上载的文件名之间没有联系,然后如何将上载的三个文件移动到使用_id创建的文件夹中。
我可能选择了错误的词来表达我的问题,但是我可以这样明确地指出。假设user1上传了3张照片。目前,我们有3张图片和一个带有_id的文件夹。下一刻,user2还上传了3张照片。目前,我们有2个不同_id的文件夹(正确的是)和6张照片。如何找到一种方法将user1的3张照片移动到它创建的_id文件夹中,并将user2的照片移动到它创建的_id文件夹中。 我无法使用广告的_id命名照片,因为在运行upload.array()时尚不可用。首先保存广告,然后生成mongodb中的_id并可以使用,因此在创建目录时就可以使用它(请参见代码)。
我需要指导亲爱的stackoverflow社区!我需要方向。