Хранение пользовательских файлов в папках, используя multer - PullRequest
0 голосов
/ 28 октября 2018

Приложение, которое я создаю, позволяет пользователям размещать объявления.Объявления позволяют загружать несколько изображений.Я пытаюсь поместить изображения, загруженные каждым пользователем, в соответствующую папку с именами папок _id объявления, которое вставляется в mongodb.

Вот код маршрута;

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, зная, что между именами загруженных файлов нет связи.

Возможно, я выбираю неправильные слова, чтобы выразить свою проблему, но вот как я могу выразить это.Представьте, что пользователь1 загружает 3 фотографии.На данный момент у нас есть 3 изображения и папка с _id под рукой.В следующий момент user2 также загрузит 3 фотографии.На данный момент у нас есть 2 папки разных _id (правильно) и 6 фотографий.Как мне найти способ переместить 3 фотографии пользователя user1 в созданную им папку _id и фотографии пользователя user2 в созданную папку _id. Я не могу назвать фотографии с _id объявления, потому что в момент запуска upload.array () он недоступен .Сначала объявление сохраняется, затем _id в mongodb get сгенерировано и доступно для использования, следовательно, во время создания каталога оно доступно (см. Код).

Мне нужно направление, уважаемое сообщество stackoverflow!Мне нужно направление ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...