【发布时间】:2021-04-26 10:35:07
【问题描述】:
我正在使用 Multer/multer-storage-cloudinary 将图像直接上传到 Cloudinary,而不是先将其上传到本地临时目录,然后将其发送到 Cloudinary:
const express = require('express');
const router = express.Router({mergeParams:true});
if (app.get('env') == 'development'){ require('dotenv').config(); }
const crypto = require('crypto');
const cloudinary = require('cloudinary').v2;
const { CloudinaryStorage } = require('multer-storage-cloudinary');
const multer = require('multer');
const { storage } = require('../cloudinary');
const upload = multer({storage});
//configure cloudinary upload settings
cloudinary.config({
cloud_name:process.env.CLOUDINARY_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET
});
const storage = new CloudinaryStorage({
cloudinary: cloudinary,
folder: ('book_tracker/'+process.env.CLOUDINARY_FOLDER+'posts'),
allowedFormats: ['jpeg', 'jpg', 'png'],
filename: function (req, file, cb) {
let buf = crypto.randomBytes(16);
buf = buf.toString('hex');
let uniqFileName = file.originalname.replace(/\.jpeg|\.jpg|\.png/ig, '');
uniqFileName += buf;
console.log(req.body);
cb(undefined, uniqFileName );
}
});
const middleware = {
function asyncErrorHandler: (fn) =>
(req, res, next) => {
Promise.resolve(fn(req, res, next))
.catch(next);
}
}
/* POST create user page */
router.post('/register', upload.single('image'), asyncErrorHandler(postRegister));
我遇到的是我在req.file 中得到的响应不是完整的 Cloudinary 响应,其中包括 public_id 等。相反,它是这样的:
{
fieldname: 'image',
originalname: 'My Headshot.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
path: 'https://res.cloudinary.com/<cloudinary_name>/image/upload/v1611267647/<public_id>.jpg',
size: 379632,
filename: '<public_id>'
}
自从我使用 multer-storage-cloudinary 以来已经有一段时间了,尽管 storage 是直接取自一个可以返回正确信息的旧项目。我需要设置 multer 或 multer-storage-cloudinary 中的内容以便将完整的 cloudinary 响应放入 req.file 中吗?
【问题讨论】:
-
我对 cloudinary 一无所知,但它是否可能是 asyncErrorHandler 没有考虑的流式响应?
-
@Chris 我几乎同意你的看法,除了这不是云响应的截断版本,它正在获取响应并将少数值分配给新键。请参阅此处的“示例响应”:cloudinary.com/documentation/image_upload_api_reference
path这是 cloudinary 响应中的secure_url,与filename相同的是来自 cloudinary 的public_id
标签: node.js express multer cloudinary