如何在节点中使用 multer 将图像上传到 cloudinary 并与其他数据一起表达
Posted
技术标签:
【中文标题】如何在节点中使用 multer 将图像上传到 cloudinary 并与其他数据一起表达【英文标题】:How can I upload image to cloudinary using multer in node and express with other data 【发布时间】:2020-04-10 02:16:11 【问题描述】:请问我的代码有什么问题?我想设置我的网络应用程序,以便当用户通过带有其他文本数据的表单发布图像时,图像将上传到 cloudinary 并返回 url 并与用户提交的其他数据一起保存所有记录到我的数据库。请注意,我正在使用 pg-promise 库和 postgres DB。我在下面包含我的代码以供参考。
我的数据架构
CREATE TABLE photo_table (
post_id uuid REFERENCES post(post_id) NOT NULL,
photo_by text REFERENCES m_user(username),
title text NOT NULL,
description text NOT NULL,
photo_url text NOT NULL,
category text,
location text,
campaign text,
posted_on timestamp NOT NULL default now(),
updated_on timestamp NOT NULL default now(),
PRIMARY KEY (pid)
);
我的 CLOUDINARY 和 MULTER 配置文件
const cloudinary = require('cloudinary').v2;
const multer = require("multer");
const cloudinaryStorage = require("multer-storage-cloudinary");
cloudinary.config(
cloud_name: 'xxxxxxxx',
api_key: 'xxxxxxxx3115',
api_secret: 'xxxxxxxxxxxxYXpmAAr3b04'
);
const storage = cloudinaryStorage(
cloudinary: cloudinary,
folder: "photos",
allowedFormats: ['jpg', 'jpeg', 'png'],
transformation: [ width: 960, height: 960, crop: "limit" ],
filename: (req, file, callback) =>
const name = file.originalname.split(' ').join('_');
callback(undefined, name);
);
module.exports = multer(storage: storage).single('photo');
我的 API 发布请求
const multer = require('../middlewares/multer/photo-config');
//multer在我的路由文件中被调用如下行所示
router.post('/', multer, photoCtrl.addPhoto);
下面的函数是我的控制器请求
function addPhoto(req, res, next)
const queryPhoto = 'INSERT INTO post (post_type, created_on) VALUES($1, $2) RETURNING pid'
db.tx('my-transaction', t =>
return t.one(queryPhoto, ['photo', 'now()'])
.then(post =>
const data =
photo_by: req.body.username,
title: req.body.title,
description: req.body.description,
photo_url: req.files,
category: req.body.category,
location: req.body.location,
campaign: req.body.campaign
const insertPhotoText = `INSERT INTO photo_table (pid, photo_by, title, description, photo_url, category, location, campaign, posted_on, updated_on)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`
const insertPhotoValues = [post.pid, data.photo_by, data.title, data.description, data.photo_url, data.category, data.location, data.campaign, 'now()', 'now()']
return t.none(insertPhotoText, insertPhotoValues);
);
)
.then(function ()
res.status(200)
.json(
status: 'success',
message: 'One photo added'
);
)
.catch(function (err)
return next(err);
)
【问题讨论】:
谢谢@aditi。让我试试这个。但我的主要挑战即将到来,因为我正在尝试使用 pg-promise 在事务中发送发布请求。 【参考方案1】:要上传到Cloudinary,需要调用uploader()方法:https://cloudinary.com/documentation/node_integration
示例代码:
app.post('/', upload.any([ name: "test" ]), (req, res) =>
var files=req.files;
if(files)
files.forEach(function(file)
cloudinary.uploader.upload(file.path, function(result)
console.log(result);
);
);
【讨论】:
以上是关于如何在节点中使用 multer 将图像上传到 cloudinary 并与其他数据一起表达的主要内容,如果未能解决你的问题,请参考以下文章
如何在nodejs中使用sharp调整图像大小然后使用multer上传
如何在nodejs中使用sharp调整图像大小然后使用multer上传
如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?