javascript - 如何将图像上传到cloudinary

标签 javascript node.js cloudinary

我想将图像上传到cloudinary形式我的NodeJS api,我有我的模型,在这个模型中我有一个名为图像的字段,这个字段是字符串类型,在这里我想保存作为响应接收的url云。

这是我的 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;

我想保存带有名称、描述的数据,在图像中,我想保存来自 cloudinary 的 url。

我在cloudinary中保存了一些图像,但我找不到在图像字段中仅保存网址的方法

注意:我正在使用 body-parser,这是我的 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;

最佳答案

首先,您需要使用 multer 之类的包来处理 multipart/form-datamultiparty 。因此,使用多方:

'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 });
      });
    });
  }) 
}

关于javascript - 如何将图像上传到cloudinary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557300/

相关文章:

javascript - 使用距离查找纬度和经度

javascript - Wordpress:Jquery 提交事件,页面重新加载而不是触发 document.location.href

javascript - 为什么 lodash 'some' 函数不能按预期工作?

node.js - HTTP 内容编码 : gzip not recognized and wrong Content-Length

laravel - 在本地存储图像 vs cloudinary vs s3

java - 如何在线程内访问变量?

javascript - 声明多个 document.getElementById ('' );几行变量

node.js - gyp - 如何指定链接库风格

javascript - 尝试加载 Chrome 配置文件时出现 Puppeteer "Unable to move ShaderCache"

Swift 3 上传视频到 Cloudinary 失败