Как сохранить изображение с помощью nodejs, express, mongodb и реагировать - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь сохранить изображение, используя node и mongodb. Я использую реагирование в веб-интерфейсе. Я пытался использовать multer, но выдает ошибку, говорящую «TypeError: путь должен быть строкой или буфером». Есть ли другой способсохранить изображение с использованием узла и mongodb

 //server.js

 const multer = require("multer");

 const storage = multer.diskStorage({
 destination: function (req, res, cb) {
         cb(null, 'uploads/')
      }
 });

 const upload = multer({
     storage: storage
 });

 router.route('/imageCard/add').post(upload.single('file'), function                     (req, res) 
 {
     let imageDetails=new ImageCard();
     imageDetails.name=req.body.name;
     imageDetails.imgSource= fs.readFileSync(req.body.imgSource);
     imageDetails.price=req.body.price;
     imageDetails.size=req.body.size;
     imageDetails.save().then(details=>
      {
          res.status(200).json('Added');
      }).catch(err=>{
     result.status(400).send('Failed to Add');
     })

 });

 //(model )
 import mongoose from 'mongoose';
 const Schema = mongoose.Schema;

 let imageCard=new Schema({

     name:{
         type:String
     },
     imgSource:{

         type:Buffer
     },
     size:{
         type:String
     },
     price:{
         type:String
     }
 });

 export default mongoose.model('ImageCard', imageCard);

 //react file
 onChange(e) {   
    this.state.file = e.target.files[0];  
 }

 onsubmit() {
    console.log('on submit');
    const newDoc = {
        name: document.getElementById('name').value,
        price: document.getElementById('price').value,
        size: document.getElementById('size').value,

        imgSource:this.state.file
    }
    console.log(newDoc.imgSource);
              axios.post(`http://localhost:4000/imageCard/add`,newDoc).then(res=>{
        console.log(res.data);
    }).catch(err=>{
        console.log(err);
    });

}

Если я использую код ниже, то выдает эту ошибку: TypeError: Невозможно прочитать свойство 'путь' из неопределенного

imageDetails.imgSource= fs.readFileSync(req.file.path);

Я не получаюЗначения imgSource в файле server.js, он показывает нулевые значения.

1 Ответ

0 голосов
/ 10 июня 2019

Я столкнулся с той же проблемой всего несколько дней назад.Наконец, я достигаю этого, делая это:

    const multer  = require('multer');
const path = require('path');


const upload = multer({
    storage: multer.diskStorage({
        destination: (req, file, callback) => {
            try {
                let path = "What ever your path is";
                fs.mkdirsSync(path);
                callback(null, path);
            }catch (e) {
                callback(jsonError(e),null)
            }
        },
        filename: (req, file, callback) => {
            //original name is the uploaded file's name with ext
            callback(null, mongoose.Types.ObjectId()+path.extname(file.originalname));
        }
    })
});

Тогда на вашем маршруте сделайте ваш улов.Обратите внимание, что после того, как работает multer, у вас будет новый req.file или req.files с именем, размером и т. Д.

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