2017-12-25 28 views
0

이것은 productsModel.js가multer를 사용하여 파일을 업로드하는 방법/form-data에 게시 하시겠습니까?

'use strict'; 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var productsSchema = new Schema({ 
     name: { 
     type: String, 
     required: true 
     }, 
     cost: { 
      type: Number 
     }, 
     product_imagePaths: [{ 
      type: String 
     }] 
    }); 

module.exports = mongoose.model('Products', productsSchema); 

파일입니다 그리고 이것은

var mongoose = require('mongoose'), 
Products = mongoose.model('Products'); 


exports.uploadProducts = function(req,res) { 
    var new_product = new Products(req.body) 
    new_product.save(function(err,product){ 
     if(err) { 
      res.send(err); 
     } 
     res.status = 200; 
     res.json({ 
      "status":"success" 
     }); 
    }); 
}; 

productsRoutes.js 내 server.js

을에서

'use strict'; 
module.exports = function (app) { 
    var productsController = require('../controllers/productsController'); 

    app.route('/products') 
    .get(productsController.fetchAllProducts) 
    .post(productsController.uploadProducts); 
}; 

내 productsController.js의 코드

// mongoose instance connection url connection 
mongoose.Promise = global.Promise; 
var db = mongoose.connect('mongodb://localhost/abcd', { 
    useMongoClient: true 
}); 


// body parser middleware 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true })); 

// route 
var userRoutes = require('./api/routes/userRoutes'); 
var aboutUsRoutes = require('./api/routes/aboutusRoutes'); 
var productsRoutes = require('./api/routes/productsRoutes'); 
userRoutes(app); 
aboutUsRoutes(app); 
productsRoutes(app); 

이제는 x-www-form-urlencoded을 사용할 때 작동합니다. 하지만 Post 메서드 (productsController.js의 uploadProducts)를 통해 파일을 업로드하려는 경우 form-data을 통해서만 파일을 업로드 할 수 있습니다. 그러나 form-data에서는 작동하지 않습니다. 나는 multerform-data 업로드에 사용될 수 있다고 읽었지 만 다음 방법론에서 그것을 사용하는 방법을 알지 못합니다.

+0

클라이언트 프레임 워크를 작성하는 데 어떤 프레임 워크를 사용 했습니까? –

+0

각도 4를 사용하고 있습니다. –

답변

0

uploadProducts 함수를 호출하기 전에 미들웨어로 multer을 사용하고 싶습니다. 여기

req.file.bufferproductsController.js에 액세스 할 수있는 이미지의 Buffer을 생성합니다 productRoutes.js

'use strict'; 
const multer = require('multer') 
const storage = multer.memoryStorage() 
const upload = multer({ 
     storage: storage, 
     limits: { 
     fileSize: 5000000, 
     files: 1 
     } 
    }) 
module.exports = function (app) { 
    var productsController = require('../controllers/productsController'); 

    app.route('/products') 
    .get(productsController.fetchAllProducts) 
    .post(upload.single('img'), productsController.uploadProducts); 
}; 

이에 대한 예제 설정이다.

upload.singlemulter의 내장 함수입니다. 다른 기능에 대한 자세한 내용은 here을 참조하십시오. 또한 img은 입력란의 이름과 일치해야합니다. 즉, <input type="file" name="img">

이것은 여러 가지 방법 중 하나 일뿐입니다. 희망이 도움이됩니다!