2017-10-04 3 views
0

이미지를 cloudy 형식으로 업로드하고 싶습니다. NodeJS API에 내 모델이 있습니다.이 모델에는 이미지라는 입력란이 있는데이 입력란은 문자열이며 여기서 url은 cloudinary의 응답으로 수신합니다.이미지를 구름에 업로드하는 방법

여기 여기, 내 model.js

'use strict'; 

const mongoose = require('mongoose'); 

const CursoSchema = mongoose.Schema({ 
    name: { 
    type: String, 
    required: true 
    }, 
    image: { 
    type: String, 
    }, 
    description: { 
    type: String, 
    required: true 
    } 
}); 

module.exports = mongoose.model('Curso', CursoSchema); 

그리고 내 controller.js입니다 내가 URL을 저장해야 할 경우, 내가 cloudinary 문서의 방법으로 시도이다.

var imageFile = req.files.image; 
cloudinary.uploader.upload(imageFile.path, function(result){ 
    if (result.url) { res.status(200).send({url: result.url}); 
    }else { 
    console.log('Error uploading to cloudinary'); 
} 
}); 

하지만 방금 이미지를 업로드했습니다. 여기 내 controller.js

'use strict'; 

const Curso = require('../models/curso'); 
const config = require('../config'); 
const cloudinary = require('cloudinary'); 

cloudinary.config({ 
    cloud_name: 'something', 
    api_key: 'somthingelse', 
    api_secret: 'andotherthing' 
}) 

function saveCurso(req, res) { 
    let curso = new Curso(); 
    let params = req.body; 
    curso.name = params.name; 
    curso.description = params.description; 
    //How to get the image and upload it to cloudinary 

    curso.save((err, cursoSaved)=>{ 
    if(err){return res.status(500).send({message:'Error'});} 
    if(!cursoSaved) return res.status(404).send({message: 'Empty'}); 
    return res.status(200).send({curso: cursoSaved}); 
    }); 
} 

module.exports = { 
    saveCurso, 
} 

그리고 내 routes.js 파일입니다 : 나는 이름, 설명과 이미지의 데이터를 저장할

'use strict'; 

const express = require('express'); 
const api = express.Router(); 
const cursoController = require('../controllers/curso'); 

api.post('/curso', cursoController.saveCurso); 

module.exports = api; 

, 난에서 URL을 저장할 흐린.

나는 cloudinary에서 일부 이미지를 저장하지만 내 이미지 필드에

참고 만 URL을 저장하는 방법을 찾을 수 없습니다 : 나는 몸 파서를 사용하고 있는데이 내 app.js입니다

'use strict'; 

const bodyParser = require('body-parser'); 
const express = require('express'); 
const app = express(); 

const curso_routes = require('./routes/curso'); 

app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 

app.use('/api', curso_routes); 

module.exports = app; 

답변

1

우선 multer 또는 multiparty과 같은 패키지를 사용하여 multipart/form-data을 처리해야합니다. 따라서 다중 상대방을 사용하여 :

'use strict'; 

const Curso = require('../models/curso'); 
const config = require('../config'); 
const cloudinary = require('cloudinary'); 
const multiparty = require('multiparty'); 

cloudinary.config({ 
    cloud_name: 'something', 
    api_key: 'somthingelse', 
    api_secret: 'andotherthing' 
}) 

function saveCurso(req, res) { 

    //How to get the image and upload it to cloudinary 
    let form = new multiparty.Form({ maxFilesSize: 10 * 1024 * 1024 }); //setting max size of image to 10MB 
    form.parse(req, (err, fields, files) => { 
    if (err) return err 
    let curso = new Curso(); 
    curso.name = fields.name; 
    curso.description = fields.description; 
    cloudinary.v2.uploader.upload(files.content[0].path, (err, result) => { // content is the name of the image input on the front end form 
     if (err) return err 
     curso.image = result.secure_url; 
     curso.save((err, cursoSaved) => { 
     if (err) { return res.status(500).send({ message: 'Error' }); } 
     if (!cursoSaved) return res.status(404).send({ message: 'Empty' }); 
     return res.status(200).send({ curso: cursoSaved }); 
     }); 
    }); 
    }) 
} 
+0

어떻게 우편 발송자와 테스트 할 수 있습니까? – SupineDread89

+0

'/ api/curso'에 게시물 요청을하고 본문이'form-data'이고 텍스트 대신 파일 중 하나를 입력으로 선택하십시오. 위의 예에 따르면, 키는 'content'이고 값은 이미지입니다. –

+0

사실 나는 오류가 있었지만 로그에 남았습니다. 다른 필드가 필요하면 어디에 있습니까 – SupineDread89

관련 문제