Skip to content

Commit b78ba17

Browse files
created: get-upload-url route (#1102)
1 parent e2310c1 commit b78ba17

File tree

8 files changed

+243
-0
lines changed

8 files changed

+243
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import cloudinary from '../config/cloudinary.js';
2+
import { nanoid } from 'nanoid';
3+
4+
export const getUploadUrl = async (req, res) => {
5+
try {
6+
if (!req.file) {
7+
return res.status(400).json({ error: "No file uploaded" });
8+
}
9+
10+
const media = req.file.path;
11+
const date = new Date();
12+
const uniqueFileName = `${nanoid()}-${date.getTime()}`;
13+
14+
const result = await cloudinary.uploader.upload(media, {
15+
public_id: uniqueFileName,
16+
format: "jpeg",
17+
resource_type: "image",
18+
});
19+
20+
return res.status(200).json({ uploadURL: result.secure_url });
21+
22+
} catch (error) {
23+
console.error("Cloudinary upload error:", error);
24+
return res.status(500).json({ error: "File upload failed" });
25+
}
26+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import multer from "multer";
2+
3+
const storage = multer.diskStorage({
4+
filename: (req, file, cb) => {
5+
cb(null, file.originalname + "-" + Date.now());
6+
}
7+
});
8+
9+
const upload = multer({ storage: storage });
10+
11+
export default upload;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import express from "express";
2+
import upload from "../../Middlewares/multer.middleware.js";
3+
import { getUploadUrl } from "../../Controllers/get-upload-url.controller.js";
4+
5+
const mediaUploadRoute = express.Router();
6+
7+
mediaUploadRoute.post("/get-upload-url", upload.single('image'), getUploadUrl);
8+
9+
export default mediaUploadRoute;

backend/Routes/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import express from 'express';
22
import authRoutes from './api/auth.routes.js';
3+
import mediaUploadRoute from './api/get-upload-url.routes.js';
34

45
const router = express.Router();
56

67
router.use('/auth', authRoutes);
8+
router.use('/media', mediaUploadRoute);
79

810
export default router;

backend/config/cloudinary.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { v2 as cloudinary } from 'cloudinary';
2+
import dotenv from "dotenv";
3+
dotenv.config();
4+
5+
cloudinary.config({
6+
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
7+
api_key: process.env.CLOUDINARY_API_KEY,
8+
api_secret: process.env.CLOUDINARY_API_SECRET,
9+
secure: true
10+
});
11+
12+
export default cloudinary;

backend/package-lock.json

Lines changed: 180 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
"description": "",
1515
"dependencies": {
1616
"bcrypt": "^5.1.1",
17+
"cloudinary": "^2.5.1",
1718
"cors": "^2.8.5",
1819
"dotenv": "^16.4.7",
1920
"express": "^4.21.2",
2021
"firebase-admin": "^13.1.0",
2122
"jsonwebtoken": "^9.0.2",
2223
"mongoose": "^8.11.0",
24+
"multer": "^1.4.5-lts.1",
2325
"nanoid": "^5.1.2"
2426
},
2527
"devDependencies": {

backend/server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import express from "express";
22
import cors from "cors";
33
import dotenv from "dotenv";
4+
45
import connectDB from "./config/db.js";
56
import router from "./Routes/index.js";
67

0 commit comments

Comments
 (0)