2026-05-20 버전의 클립 영상 및 이미지 업로드 API입니다.
클립 영상 업로드 URL 발행 API를 통해 받은 uploadUrl로 S3 업로드를 진행한다.
이때 클립영상 업로드 URL 발행할때 넣었던 contentType을 헤더에 넣어준다. 그리고 영상을 첨부하여 S3에 업로드 한다..
S3 파일 업로드
- 클립 영상 및 이미지 업로드 URL 발행 API를 통해 받은 uploadUrl로 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");