Express загрузка и просмотр файла - PullRequest
0 голосов
/ 06 апреля 2020

Я использую express -fileupload для загрузки изображений. Изображения сохраняются в моем локальном каталоге. Я хочу вставить имя файла в mongodb, если это возможно. Наконец, я хочу, чтобы изображение отображалось в моем интерфейсе.

    function insertRecord(req,res){
    if(req.files){
    const file=req.files.filename
    filename=file.name
    file.mv("./upload"+filename,function(err){
        if(err)
        console.log(err)
    })
}
    const user=new User()
    user.name=req.body.name
    user.address=req.body.address
    user.email=req.body.email
    user.mobile=req.body.mobile
    user.filename=req.body.filename
    user.save((err,docs)=>{
        if(!err){
        res.redirect('/user/list')
        }
        else {
            if (err.name == 'ValidationError') {
                handleValidationError(err, req.body);
                res.render("./users/addOrEdit", {
                    viewTitle: "Insert User",
                    user: req.body
                });
            }
            else
                console.log('Error during record insertion : ' + err);
        }
    });
}

Я не уверен, правильный ли способ вставки имени файла в mongodb. Во всяком случае, это необязательно, но я не понимаю, как я могу отобразить загруженные изображения, которые присутствуют в локальном каталоге. Я попытался сохранить изображение как base64, но запись не сохраняется в базе данных.

    var storage = multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, 'uploads/')
    },
    filename: function (req, file, cb) {
      cb(null, file.fieldname + '-' + Date.now())
    }
  })

  var upload = multer({ storage: storage })

router.post('/',upload.single('myImage'),function(req,res){
    if (req.body._id == '')
        insertRecord(req, res);

        else
        updateRecord(req, res);
})


function insertRecord(req,res){
var img = fs.readFileSync(req.file.path);
var encode_image = img.toString('base64');  
 var finalImg = {
      contentType: req.file.mimetype,
      image:  new Buffer(encode_image, 'base64')
   };

    const user=new User()
    user.name=req.body.name
    user.address=req.body.address
    user.email=req.body.email
    user.mobile=req.body.mobile
    user.save(finalImg,(err,docs)=>{
        if(!err){
        res.redirect('/user/list')
        }
        else {
            if (err.name == 'ValidationError') {
                handleValidationError(err, req.body);
                res.render("./users/addOrEdit", {
                    viewTitle: "Insert User",
                    user: req.body
                });
            }
            else
                console.log('Error during record insertion : ' + err);
        }
    });
}

1 Ответ

0 голосов
/ 06 апреля 2020

Edit: я думаю, что в коде есть проблема: это должно быть `'./upload/'+filename' не без второго sla sh.

Для того, чтобы показать изображения, Вы должны открыть маршрут c в Express. Пример: app.use('/images', express.static(PATH)). Затем вы можете во внешнем интерфейсе назвать его как <img src="URL/images/FILENAME" />

. Из вашего кода невозможно понять, какие данные вы отправляете на сервер. Насколько я понимаю, вы пытаетесь mv имя файла строки. Для передачи файлов (таких как изображения) у вас должны быть данные формы вместо JSON данных, или вы должны закодировать файл изображения в Base64, чтобы передать его как текст (не имя файла, весь файл).

Проверьте Multer на эту работу. Это хорошо описано в README.md. Кроме того, пока вы не отправите форму, изображение не будет доступно в интерфейсе. Если вы хотите просмотреть изображение перед загрузкой, это отдельный процесс, который вы можете узнать подробнее здесь .

...