Spaces:
Running
Running
| import { v2 as cloudinary } from "cloudinary"; | |
| import fs from "fs"; | |
| import logger from "../logger/create.logger.js"; | |
| cloudinary.config({ | |
| cloud_name: process.env.CLOUD_NAME, | |
| api_key: process.env.API_KEY, | |
| api_secret: process.env.API_SECRET | |
| }); | |
| async function uploadOnCloudinary(localFilePath: string) { | |
| try { | |
| if (!localFilePath) return null; | |
| // Determine file type from extension | |
| const fileExt = localFilePath.split('.').pop()?.toLowerCase(); | |
| const resourceType = fileExt === 'pdf' ? 'raw' : 'auto'; // PDFs -> raw, others -> auto | |
| logger.info(`Uploading file to Cloudinary: ${localFilePath}`); | |
| const uploadResult = await cloudinary.uploader.upload(localFilePath, { | |
| resource_type: "auto" | |
| }); | |
| logger.info("File uploaded successfully to Cloudinary", { public_id: uploadResult.public_id }); | |
| // Delete file from local server | |
| fs.unlinkSync(localFilePath); | |
| return uploadResult; | |
| } catch (err) { | |
| logger.error("Cloudinary upload error:", err); | |
| // Delete temp file even if upload fails | |
| if (fs.existsSync(localFilePath)) fs.unlinkSync(localFilePath); | |
| return null; | |
| } | |
| } | |
| async function deleteOnCloudinary(url: string){ | |
| const public_id = url.split("/").pop()?.split(".").shift(); | |
| if(!public_id){ | |
| throw new Error("Invalid file path") | |
| } | |
| try{ | |
| logger.info(`Deleting file from Cloudinary: ${public_id}`); | |
| await cloudinary.uploader.destroy(public_id); | |
| logger.info(`File deleted from Cloudinary: ${public_id}`); | |
| } catch(e) { | |
| logger.error("Cloudinary delete error:", e); | |
| } | |
| } | |
| export { uploadOnCloudinary, deleteOnCloudinary }; | |