使用 multer-storage-cloudinary 存储在两个不同的文件夹中

Posted

技术标签:

【中文标题】使用 multer-storage-cloudinary 存储在两个不同的文件夹中【英文标题】:Store in two different folders with multer-storage-cloudinary 【发布时间】:2021-11-29 05:14:18 【问题描述】:

我想将用户的头像存储在与 Cloudinary 中产品文件夹不同的文件夹中。

我试图这样做,但它不起作用。 如何在同一个项目中使用两个不同的文件夹?

云配置:

const cloudinary = require('cloudinary').v2;

const  CloudinaryStorage  = require('multer-storage-cloudinary');
const multer = require('multer')

 cloudinary.config (
    cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
    api_key: process.env.CLOUDINARY_KEY,
    api_secret: process.env.CLOUDINARY_SECRET
)


// PARA ALMACENAR LAS IMAGENES DE LOS PRODUCTOS
 const storage = new CloudinaryStorage (
    cloudinary: cloudinary,
    params:
        folder: 'ProductosMarketV2',
        allowedFormats : ['jpeg', 'png', 'jpg'],
        // transformation: [ width: 640, height: 480, crop:'fit'],
    
    
);

const parser = multer(storage)


//PARA ALMACENAR LAS IMAGENES DE LOS AVATARES DE USUARios
const storage2 = new CloudinaryStorage (
    cloudinary: cloudinary,
    params:
        folder: 'ProductosMarketV2/AvataresUsuarios',
        allowedFormats : ['jpeg', 'png', 'jpg'],
        // transformation: [ width: 640, height: 480, crop:'fit'],
    
    
);

const parser2 = multer(storage2)

module.exports = 
    cloudinary,
    storage,
    parser,
    parser2

parser 如果我与头像或产品一起使用并将图像保存在 MongoDB 中的正确模型中,则可以使用。但是如果我用parser2,就不行了。

在我的路由中,parser 工作并将 url 和文件名存储在 mongodb 头像模型中:

router.post('/avatar/:id',
auth,
parser.single('imagesAvatar'),
users.crearAvatar
);

使用 parser2,不起作用:

router.post('/avatar/:id',
auth,
parser2.single('imagesAvatar'),
users.crearAvatar
);

感谢您的帮助。

【问题讨论】:

当你提到它不起作用时,你能分享更多关于这个的信息吗?使用 parser2 时是否遇到任何错误,这部分代码是否真的被调用了?即使使用两个解析器,图像是否总是上传到“ProductosMarketV2”文件夹中? 这行不通。我有两种配置,当我尝试使用 de parser2 时,不会将图像发送到 cloudinary、存储和返回数据(url 和文件名),但如果我使用解析器,则效果很好。我想分别存储用户的头像和产品的图像......有帮助吗?谢谢 【参考方案1】:

我确实找到了解决方案:

您可以设置云数据:

const cloudinary = require('cloudinary').v2;

const  CloudinaryStorage  = require('multer-storage-cloudinary');
const multer = require('multer')


 cloudinary.config (
    cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
    api_key: process.env.CLOUDINARY_KEY,
    api_secret: process.env.CLOUDINARY_SECRET
)


// PARA ALMACENAR LAS IMAGENES DE LOS PRODUCTOS
 const storage = new CloudinaryStorage (
    cloudinary: cloudinary,
    params:
        folder: 'ProductosMarketV2',
        allowedFormats : ['jpeg', 'png', 'jpg'],
        // transformation: [ width: 640, height: 480, crop:'fit'],
    
    
);


//PARA ALMACENAR LAS IMAGENES DE LOS AVATARES DE USUARIOS
const storage2 = new CloudinaryStorage (
    cloudinary: cloudinary,
    params:
        folder: 'ProductosMarketV2/AvataresUsuarios',
        allowedFormats : ['jpeg', 'png', 'jpg'],
        // transformation: [ width: 640, height: 480, crop:'fit'],
    
    
);

const parser = multer(storage: storage)

//const parser2 = multer(storage2)

module.exports = 
    cloudinary,
    storage,
    storage2,
    parser

然后在路由中,改为使用:

const  parser,  storage2 = require ('../cloudinary')
const multer = require('multer')

router.put("/editar/:id", 
    auth, 
    parser.single("imagesAvatar"),//with the folder name in the configuration of cloudinary
    users.editarUsuario
    );

//use multer(storage: 'the folder name') and allways works
    
router.put("/editar/:id", 
    auth, 
    multer(storage: storage2).single("imagesAvatar"),
    users.editarUsuario
    );

【讨论】:

以上是关于使用 multer-storage-cloudinary 存储在两个不同的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)