From 427ddaae43a7d86ebf48135307af8aedfe646afe Mon Sep 17 00:00:00 2001 From: Siva20021 Date: Sat, 5 Oct 2024 13:38:38 +0530 Subject: [PATCH 1/2] Integrated Cloudinary a Free cloud service to upload images for Profile Picture --- README.md | 3 +++ backend/controllers/userController.js | 7 ++++--- backend/package.json | 1 + backend/utils/UploadImage.js | 24 ++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 backend/utils/UploadImage.js diff --git a/README.md b/README.md index 019264f..7034c56 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,9 @@ The illustration above showcases a conversation between two separate tabs opened JWTEXPIRES=90d JWTSECRET=<-giveanysecretkey-> JWT_COOKIE_EXPIRES=90 + CLOUD_NAME= + CLOUDINARY_API_KEY= + CLOUDINARY_API_SECRET= ``` 5. Start Backend Server: diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index 45bbd0b..75fc5d6 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -3,7 +3,7 @@ const catchAsync=require('../utils/catchAsync'); const AppError = require('../utils/AppError'); const Chat=require('../models/chatModel'); const multer=require('multer'); - +const uploadPhoto=require('../utils/UploadImage'); const multerstorage=multer.diskStorage({ destination:(req,file,cb)=>{ cb(null,'public/img/user') @@ -36,7 +36,6 @@ const filterObj = (obj, ...allowedFields) => { Object.keys(obj).forEach(el => { if (allowedFields.includes(el)) newObj[el] = obj[el]; }); - return newObj; }; @@ -74,10 +73,12 @@ exports.UploadPhoto=catchAsync(async(req,res,next)=>{ let data; if (req.file) data= req.file.filename; - const updatedUser = await User.findByIdAndUpdate(req.user.id,{pic:data}, { + const uploadedUri=await uploadPhoto.UploadImage(data); + const updatedUser = await User.findByIdAndUpdate(req.user.id,{pic:uploadedUri}, { new: true, runValidators: true }); + console.log("UPDATED USER",updatedUser); res.status(200).json({ status:'success', diff --git a/backend/package.json b/backend/package.json index 44f32f4..f556a9c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,6 +12,7 @@ "dependencies": { "axios": "^1.5.0", "bcryptjs": "^2.4.3", + "cloudinary": "^2.5.0", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^16.3.1", diff --git a/backend/utils/UploadImage.js b/backend/utils/UploadImage.js new file mode 100644 index 0000000..b8456ad --- /dev/null +++ b/backend/utils/UploadImage.js @@ -0,0 +1,24 @@ +const cloudinary = require('cloudinary').v2; +const path = require('path'); + +/** + * UploadImage function - This Function is to upload Image in Cloudinary + * @param {*} data - Upload the Local Image to Cloudinary and return the result + * @returns {String} - Return the Image URL + */ +const UploadImage = async (data) => { + const imagePath = path.join(__dirname, "../public/img/user/", data); + cloudinary.config({ + cloud_name: process.env.CLOUD_NAME, + api_key: process.env.CLOUDINARY_API_KEY, + api_secret:process.env.CLOUDINARY_API_SECRET + }); + try{ + const result=await cloudinary.uploader.upload(imagePath); + return result.secure_url; + }catch(err){ + console.log(err); + } +}; + +module.exports = { UploadImage }; From c18c5472a7cf4f4d63b67f15f91d3aa7577c4212 Mon Sep 17 00:00:00 2001 From: Siva20021 Date: Sat, 5 Oct 2024 19:14:40 +0530 Subject: [PATCH 2/2] Removed an Unecessary comment --- backend/controllers/userController.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index 75fc5d6..9eb763d 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -78,7 +78,6 @@ exports.UploadPhoto=catchAsync(async(req,res,next)=>{ new: true, runValidators: true }); - console.log("UPDATED USER",updatedUser); res.status(200).json({ status:'success',