GuidesAPI GuideChangelog
Log In
API Guide

클립 영상 및 이미지 업로드

2026-05-20 버전의 클립 영상 및 이미지 업로드 API입니다.

클립 영상 업로드 URL 발행 API를 통해 받은 uploadUrl로 S3 업로드를 진행한다.

이때 클립영상 업로드 URL 발행할때 넣었던 contentType을 헤더에 넣어준다. 그리고 영상을 첨부하여 S3에 업로드 한다..



S3 파일 업로드

항목내용
요청 방식PUT
요청 U더RL**클립 영상 및 이미지 업로드 URL 발행 ** 에서 발급받은 uploadUrl
요청 헤더Content-Type: URL 발행 시 입력한 'contentType'
요청 body업로드할 영상 파일 (binary)

주의: Content-Type 헤더에는 URL 발행 시 사용했던 동일한 contentType 값을 반드시 넣어야 합니다.



  • 예시코드
curl -X PUT \
  -H "Content-Type: video/mp4" \
  --data-binary "@/Users/yourname/videos/original.mp4" \
  "https://s3.ap-northeast-2.amazonaws.com/your-bucket-name/partners/partnerUniqueId/clips/123/original.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAXXXXX%2F20250124%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250124T023014Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;

public class PresignedPutUpload {
    public static void main(String[] args) throws Exception {
        String url = "PRESIGNED_URL_HERE";
        Path file = Path.of("/Users/test/videos/original.mp4");

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Content-Type", "video/mp4") // presign에 묶였으면 동일
                .PUT(HttpRequest.BodyPublishers.ofFile(file))
                .build();

        HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());

        if (res.statusCode() / 100 != 2) {
            throw new RuntimeException("Upload failed: " + res.statusCode() + " " + res.body());
        }

        System.out.println("Upload success");
    }
}
import requests

url = "PRESIGNED_URL_HERE"
file_path = "/Users/test/videos/original.mp4"

with open(file_path, "rb") as f:
    r = requests.put(
        url,
        data=f,
        headers={"Content-Type": "video/mp4"},  # presign에 묶였으면 동일
    )

if r.status_code // 100 != 2:
    raise Exception(f"Upload failed: {r.status_code} {r.text}")

print("Upload success")
import fs from "fs";

const url = "PRESIGNED_URL_HERE";
const filePath = "/Users/test/videos/original.mp4";

const stream = fs.createReadStream(filePath);

const res = await fetch(url, {
  method: "PUT",
  headers: {
    "Content-Type": "video/mp4", // presign에 content-type이 묶여있다면 반드시 동일
  },
  body: stream,
});

if (!res.ok) {
  const text = await res.text().catch(() => "");
  throw new Error(`Upload failed: ${res.status} ${text}`);
}

console.log("Upload success");
🏠 소스라이브 🎬 소스클립 🔗 소스링크 📢 소스애드
🧩 API 가이드
🆕 최근 업데이트
💬 도움이 더 필요하신가요?
메일로 문의 카카오톡 채널로 문의