루니버스는 개발 편의를 위해 다양한 미디어 파일 업로드 방식을 지원하며, 향후 지원 방식을 점차 늘려 갈 계획입니다. 현재 제공되고 있는 아래 업로드 옵션 중 개발 환경에 적합한 방식을 선택하여 사용하실 수 있습니다.
Option 1) HTTP Multipart 요청을 통한 파일 업로드
HTTP Multipart/form 데이터 전송을 통해 파일을 업로드하고 이를 미디어로 정의할 수 있습니다. 자세한 사항은 API 문서를 확인하세요.
Option 2) 미디어 리소스로 접근할 수 있는 Public URL 활용
미디어로 정의하고자 하는 이미지 또는 동영상 파일이 이미 웹을 통해 Public URL로 접근 가능한 경우, 이 API를 통해 해당 URL을 전달하는 것 만으로 미디어 리소스를 연결할 수 있습니다.
Option 3) AWS S3의 Pre-signed URL 방식을 활용한 파일 업로드
이 옵션은 안정적인 파일 업로드 방식을 사용하고자 하는 개발자들을 위해 제공됩니다. 앞 두 방식의 경우 미디어가 성공적으로 업로드 완료된 이후에 해당 파일의 위치가 결정되는 반면, 이 옵션을 사용하면 파일 업로드를 위한 전용 link를 먼저 할당받을 수 있습니다.
Pre-signed URL 방식은 어떻게 사용하나요?
GET /prepare API를 먼저 요청하여 pre-signed URL을 생성하세요.
Request
curl --location --request GET 'https://api.luniverse.io/svc/v2/nft/media/prepare?fileName=Luniverse_NFT.png' \ --header 'Authorization: Bearer eyJhbGciOiJIU...xzKjrwWyNRbpVTctG000' \
Response
{ "result": true, "status": 200, "data": { "method": "PUT", "bucket": "nft-contents-ap-northeast-2", "key": "public/94bf7a8d-b747-4c...11Z.jpeg", "url": "https://nft-conte...&x-id=PutObject" }, "code": "OK" }
data.url
필드와data.method
필드를 참조하여 해당 URL로 미디어 파일을 업로드하세요.Request
curl --location --request PUT 'https://nft-conte...&x-id=PutObject' \ --header 'Content-Type: image/png' \ --data-binary '@/Users/lambda256/Luniverse_NFT.png'
Response
200 OK
POST /by-prepared-key API를 호출하여 최종적으로 할당된 파일의 경로를 확인하세요.
Request
curl --location curl --request POST 'https://api.luniverse.io/svc/v2/nft/media/by-prepared-key' \ --header 'Authorization: Bearer eyJhbGciOiJIU...xzKjrwWyNRbpVTctG000' \ --data-raw '{"key":"public/94bf7a8d-b747-4c...11Z.jpeg"}'
Response
{ "code": "CREATED", "data": { "id": "1234567890123456789", "originalFilename": "abc.jpg", "mimetype": "image/jpeg", "size": "2048000", "mediaUrl": "https://nft-cdn.luniverse.io/public/sample.jpg", "createdAt": "2021-05-18T07:32:25.304Z" } }