Panduan Migrasi Praktis
Migrasi dari Cloudinary ke Cloudizero
Cara memindahkan aset media Anda dari Cloudinary ke penyimpanan Zero-Egress Cloudizero tanpa downtime dan memotong biaya bandwidth hingga 85%.
1. Mengapa Tim Beralih dari Cloudinary?
Cloudinary (Legacy)
Biaya berbasis kredit transformasi yang rumit, kuota bandwidth ketat, dan dashboard teknis yang membingungkan bagi tim non-engineer.
Cloudizero (Zero-Egress)
100% bebas biaya bandwidth egress selamanya, upload presigned langsung, dan antarmuka sefamiliar Google Drive untuk tim konten.
2. Skrip Migrasi Otomatis (Batch Stream)
Skrip Node.js/TypeScript berikut mengambil stream langsung dari URL Cloudinary dan mengunggahnya ke Cloudizero melalui @cloudizero/sdk tanpa membebani disk lokal:
scripts/migrate-from-cloudinary.ts
// scripts/migrate-from-cloudinary.ts
import { Cloudizero } from "@cloudizero/sdk";
const cz = new Cloudizero({
apiKey: process.env.CLOUDIZERO_API_KEY!,
});
interface CloudinaryAsset {
publicId: string;
url: string;
fileName: string;
mimeType: string;
folder?: string;
}
/**
* Streams assets directly from Cloudinary URLs into Cloudizero Zero-Egress Storage
* without saving heavy files to your local disk.
*/
export async function migrateAssetToCloudizero(asset: CloudinaryAsset) {
console.log(`Fetching ${asset.fileName} from Cloudinary...`);
// 1. Fetch binary stream from Cloudinary
const response = await fetch(asset.url);
if (!response.ok) throw new Error(`Failed to fetch ${asset.url}`);
const buffer = Buffer.from(await response.arrayBuffer());
// 2. Upload directly to Cloudizero Project & Folder
const uploaded = await cz.storage.upload({
file: buffer,
fileName: asset.fileName,
mimeType: asset.mimeType,
projectId: process.env.CLOUDIZERO_PROJECT_ID!,
});
console.log(`✅ Migrated! Cloudizero CDN: ${uploaded.url} ($0.00 egress)`);
return uploaded;
}3. Memperbarui Tautan di Frontend
Gantikan URL Cloudinary dengan domain CDN resmi Cloudizero:
lib/media.ts
// lib/media.ts
/**
* Simple helper to transition from Cloudinary URL pattern to Cloudizero Global CDN
*/
export function getOptimizedMediaUrl(pathOrUrl: string): string {
if (pathOrUrl.startsWith("https://res.cloudinary.com/")) {
const filename = pathOrUrl.split("/").pop();
return `https://cdn.cloudizero.com/demo/${filename}`;
}
return pathOrUrl;
}