Spaces:
Running
Running
File size: 1,733 Bytes
c01955c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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 };
|