使用multer将用户文件存储在文件夹中

时间:2018-10-28 08:59:13

标签: javascript node.js mongodb express multer

我正在构建的应用程序允许用户发布广告。广告允许上传多张图片。我正在尝试将每个用户上传的图像放入相应的文件夹中,该文件夹的名称为正插入到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社区!我需要方向。

0 个答案:

没有答案