Registry / storage / multer-storage-cloudinary

multer-storage-cloudinary

JSON →
library4.0.0jsnpmunverified

A multer storage engine for Cloudinary image/video uploads. Version 4.0.0 requires cloudinary ^1.21.0 and multer 1.x. Widely used for Express file uploads directly to Cloudinary. Supports dynamic folder, public_id, and format via async functions. Unlike raw Cloudinary SDK usage, it integrates seamlessly with multer's middleware pattern.

npm install multer-storage-cloudinary
INSTALL
IMPORT
SIG · MULTER-STORAGE-CLO
M
multer-storage-cloudinary
storagejavascriptv4.0.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

CloudinaryStorage
import { CloudinaryStorage } from 'multer-storage-cloudinary'
const CloudinaryStorage = require('multer-storage-cloudinary')
Default export is an object with CloudinaryStorage. Named import required.
CloudinaryStorage (CommonJS)
const { CloudinaryStorage } = require('multer-storage-cloudinary')
Correct CommonJS destructuring.
cloudinary (v2)
import { v2 as cloudinary } from 'cloudinary'
const cloudinary = require('cloudinary')
Must use v2 submodule. The raw require returns an object with v1 and v2.

Configures Cloudinary with env vars, creates CloudinaryStorage, and handles single file upload via Express route.

import { v2 as cloudinary } from 'cloudinary'; import { CloudinaryStorage } from 'multer-storage-cloudinary'; import multer from 'multer'; import express from 'express'; cloudinary.config({ cloud_name: process.env.CLOUDINARY_CLOUD_NAME ?? '', api_key: process.env.CLOUDINARY_API_KEY ?? '', api_secret: process.env.CLOUDINARY_API_SECRET ?? '', }); const storage = new CloudinaryStorage({ cloudinary: cloudinary, params: { folder: 'uploads', format: async (req, file) => 'png', public_id: (req, file) => `${Date.now()}-${file.originalname}`, }, }); const parser = multer({ storage }); const app = express(); app.post('/upload', parser.single('image'), (req, res) => { res.json({ url: req.file.path, public_id: req.file.filename, }); }); app.listen(3000);
Debug
Known issues
gotchapublic_id must be a function, not a static value
fix
Always provide public_id as a function (req, file) => ... to avoid duplicates.
affects: >=0.0.0
deprecatedparams.folder can also be a function, but static folder may cause permission issues
fix
Ensure folder exists or use dynamic folder function.
affects: >=0.0.0
Errors
Common errors & fixes
TypeError: cloudinary.v2 is not a constructor
Using incorrect import for cloudinary v2
fix
Use `import { v2 as cloudinary } from 'cloudinary'` or `const cloudinary = require('cloudinary').v2`
Error: ENOENT: no such file or directory, open '...'
Sometimes occurs if params are async and return undefined
fix
Ensure async functions always resolve to a valid value like string.
Upgrade
Version history
4.0.0latest on npm
Audit
Dependencies
cloudinaryrequiredCore dependency for interacting with Cloudinary API
multerrequiredThe storage engine is designed to plug into multer
Agent activity
30 hits · last 30 days
node
28
OpenAI (training)
1
Resources
multer-storage-cloudinary — npm install multer-storage-cloudinary · libregistry