// lib/cloudinary.ts
import { v2 as cloudinary } from "cloudinary";
import { getCloudflareContext } from "@opennextjs/cloudflare";
const { env } = await getCloudflareContext({ async: true });
if (!env.CLOUDINARY_CLOUD_NAME) {
throw new Error("CLOUDINARY_CLOUD_NAME is not set");
}
if (!env.CLOUDINARY_API_KEY) {
throw new Error("CLOUDINARY_API_KEY is not set");
}
if (!env.CLOUDINARY_API_SECRET) {
throw new Error("CLOUDINARY_API_SECRET is not set");
}
cloudinary.config({
cloud_name: env.CLOUDINARY_CLOUD_NAME,
api_key: env.CLOUDINARY_API_KEY,
api_secret: env.CLOUDINARY_API_SECRET,
});
export async function uploadImage(image: File): Promise<string> {
// Đọc file thành binary data
const imageData = await image.arrayBuffer();
// Lấy MIME type, ví dụ "image/jpeg" hoặc "image/png"
const mime = image.type;
// Cloudinary nhận data URI dạng base64
const base64Data = Buffer.from(imageData).toString("base64");
const fileUri = `data:${mime};base64,${base64Data}`;
// Upload và trả về URL
const result = await cloudinary.uploader.upload(fileUri, {
folder: "nextjs-course-mutations",
});
return result.secure_url;
}