How to Upload Media Files for NFT

루니버스는 개발 편의를 위해 다양한 미디어 파일 업로드 방식을 지원하며, 향후 지원 방식을 점차 늘려 갈 계획입니다. 현재 제공되고 있는 아래 업로드 옵션 중 개발 환경에 적합한 방식을 선택하여 사용하실 수 있습니다.

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 방식은 어떻게 사용하나요?

  1. 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"
    }
    
  2. 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
    
  3. 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"
      }
    }