완성형 연동 예제›Next.js
프레임워크 연동

Next.js

Zavilo 브라우저 SDK는 File 객체와 브라우저 API를 사용하므로 Client Component에서 실행해야 합니다.

Client Component

"use client";

import Script from "next/script";
import { useState } from "react";

export default function ZaviloExample() {
  const [client, setClient] = useState(null);
  const [status, setStatus] = useState("Loading SDK...");

  async function onSdkReady() {
    const sdk = await window.Zavilo.init({
      publicKey: "pk_live_xxxxx"
    });

    setClient(sdk);
    setStatus("Ready");
  }

  async function onFileChange(event) {
    if (!client) return;

    const file = event.target.files?.[0];
    if (!file) return;

    setStatus("Processing...");

    try {
      const result = await client.run("image-enhancer", {
        file,
        options: {
          preset: "balanced",
          auto: true,
          format: "jpg",
          quality: 0.92
        }
      });

      const form = new FormData();
      form.append("file", result.files[0], result.files[0].name);
      form.append("executionId", result.executionId);

      const response = await fetch("/api/upload", {
        method: "POST",
        body: form
      });

      if (!response.ok) throw new Error("Upload failed");
      setStatus("Complete");
    } catch (error) {
      setStatus(error.code || error.message || String(error));
    }
  }

  return (
    <>
      <Script
        src="https://sdk.zavilo.app/v1/zavilo.js"
        strategy="afterInteractive"
        onLoad={onSdkReady}
      />

      <p>{status}</p>
      <input
        type="file"
        accept="image/*"
        onChange={onFileChange}
        disabled={!client}
      />
    </>
  );
}

선택 사항: 업로드 Route

// app/api/upload/route.js
export async function POST(request) {
  const form = await request.formData();
  const file = form.get("file");

  if (!(file instanceof File)) {
    return Response.json({ error: "file required" }, { status: 400 });
  }

  // Store file in your own storage here.
  return Response.json({
    ok: true,
    name: file.name,
    size: file.size
  });
}
Public Key는 공개 사용을 전제로 발급된 경우에만 클라이언트 코드에 넣으세요. 실제 사용 권한은 설정된 Origin과 Tool/모드 권한으로 다시 확인됩니다.