www.dextsolution.com
DEXTUPLOAD
X5
menu toggle제품설명 > NCP Object Storage 파일 다운로드

NCP Object Storage 파일 다운로드

DEXTUploadX5는 NCP Object Storage 버킷에 존재하는 파일들을 다운로드할 수 있는 기능을 제공한다.

DEXTUploadX5를 사용하여 NCP Object Storage 버킷으로부터 파일을 다운로드하려면, 서로 다른 출처끼리 통신을 하기 위해서 CORS 설정해주어야 한다. HEAD, GET 요청 메소드 및 "Accept-Ranges" 응답헤더를 반드시 허용해야 하며, 운영 시점에는 AllowedOrigins 속성을 '*' 값으로 설정하지 않도록 주의해야 한다.

# NCP Object Storage CORS configuration
[
    {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["HEAD", "GET", "PUT", "POST", "DELETE"],
        "AllowedOrigins": ["*"]
        "ExposeHeaders": ["ETag", "Accept-Ranges"]
    }
]
NCP Object Storage에 저장된 파일이 'Public-Read' 권한을 가지는 경우

'Public-Read' 권한을 가지는 파일들을 다운로드할 때는 자격 증명 정보가 필요 없으므로, DEXTUploadX5의 단일 파일 다운로드 또는 다중 파일 다운로드 기능을 사용하여 파일을 다운로드할 수 있다. 가상 파일을 등록할 때 url 속성에 NCP Object Storage 버킷에 있는 파일 객체의 URL을 설정하면 된다.

NCP Object Storage 버킷에 보관된 객체(파일)는 다음과 같은 주소 체계를 가지고 접근할 수 있다.

https://{리전}.object.ncloudstorage.com/{버킷이름}/{key}
또는
https://{버킷이름}.{리전}.object.ncloudstorage.com/{key}
dx.addVirtualFile({ name: "서강대교_509147.jpg", size: 509147, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%BD%94%EC%8A%A4%...0%84%29+195779.jpg" });
dx.addVirtualFile({ name: "우도해변_239826.jpg", size: 239826, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%9A%B0%EB%8...80_239826.jpg" });
dx.addVirtualFile({ name: "코스모스 (빈공간) 195779.jpg", size: 195779, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%84%9C%EA%B...A%B5%90_509147.jpg" });
DEXTUploadX5와 브라우저 AWS SDK 사용하여 다운로드하기

AWS SDK를 사용하여 브라우저에서 직접 버킷에 존재하는 파일을 다운로드하는 방법으로써, '리전, 버킷, 엑세스키, 비밀엑세스키' 정보가 필요하다. 그리고 대상이 NCP Object Storage 버킷에 존재함을 알아야 하기 때문에, setDownloadMode 메소드를 사용하여 다운로드 모드를 설정해야 한다.

// NCPOS 방식으로 설정한다.
dx.setDownloadMode("NCPOS");
dx.setNCPOSDownloadConfig({
    type: "NON-SECRET",
    accessKeyId: "ABCD...1234",
    secretAccessKey: "ABCD...1234",
	// kr, us, sg, jp, de
    region: "kr",
    bucket: "abc-bucket"
});

다운로드할 객체의 주소를 가상 파일의 url로 설정하면, 주소로부터 키 값을 분리하여 다운로드 작업을 수행한다.

dx.addVirtualFile({ name: "서강대교_509147.jpg", size: 509147, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%BD%94%EC%8A%A4%...0%84%29+195779.jpg" });
dx.addVirtualFile({ name: "우도해변_239826.jpg", size: 239826, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%9A%B0%EB%8...80_239826.jpg" });
dx.addVirtualFile({ name: "코스모스 (빈공간) 195779.jpg", size: 195779, url: "https://kr.object.ncloudstorage.com/abc-bucket/%EC%84%9C%EA%B...A%B5%90_509147.jpg" });

AWS SDK를 사용하여 파일을 다운로드할 때는 url 속성에 반드시 객체의 주소를 지정할 필요는 없다. DEXTUploadX5는 url 속성이 비어 있다면, 다운로드를 수행하지 않기 때문에, 최소한의 정보만 url 속성에 설정해주면 된다. 그러나 이렇게 처리한다면, url에서 키 값을 추출할 수 없으므로 makeKey 속성에 키를 생성하는 함수를 설정해주어야 한다.

dx.setNCPOSDownloadConfig({
    ...
    // 키: 컴포넌트이름/파일이름 
    makeKey: item => `${item.controlId}/${item.name}`
});

이후 작업은 단일 파일 다운로드 또는 다중 파일 다운로드와 마찬가지로 버튼 바인딩을 사용하거나 직접 download 메소드를 호출하여 다운로드를 하면 된다.

Presigned URL을 사용하여 다운로드하기

'액세스키, 비밀엑세스키'와 같은 정보는 외부에 노출이 되면 안되는 정보이므로 공개된 곳에서는 사용하는 것은 위험하다. AWS의 자격증명 정보를 노출하지 않고 다운로드하기 위해서는 백엔드에서 사전에 서명된 주소를 생성하고 그 주소를 사용하여 파일을 다운로드하는 방법이 있다.

dx.setDownloadMode("NCPOS");
dx.setNCPOSDownloadConfig({
    //type: "SECRET",
    signedURL: "https://domain/path/ncpos-download-geturl"
});

signedURL 속성으로 지정된 백엔드 주소는 파일 다운로드할 때 필요한 서명된 주소를 생성하여 반환하는 역할을 담당한다. 백엔드에서 서명된 주소를 반환하기 위해서는 AWS에서 제공하는 SDK를 사용해야 한다. 플랫폼에 적합한 AWS SDK를 이용하여 서버 측에서 미리 서명된 주소를 생성하면, 자격 증명과 같은 정보를 노출하지 않고, 파일 다운로드 과정만 DEXTUploadX5가 처리하도록 할 수 있다.

Java Web Application 환경에서 사용가능한 예제들이 제공되므로, 제공된 예제를 참고하여 구현하도록 한다.

  • Java 그리고 Maven을 사용하는 환경인 경우 AWS SDK를 얻는 법

    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>NCP Object Storage</artifactId>
        <version>2.x.x</version>
    </dependency>
  • Java 그리고 Gradle를 사용하는 환경인 경우 AWS SDK를 얻는 법

    implementation 'software.amazon.awssdk:NCP Object Storage:2.x.x'
특징
  • 이어받기 기능을 지원한다.
  • 브라우저 AWS SDK를 사용하는 경우, 파일을 다운로드하기 시작할 때, SDK를 다운로드하는 시간이 추가로 존재할 수 있다.
  • NCP Object Storage로부터 다운로드하는 경우, 진행창에 표시되는 진행률이 타 다운로드 방식들에 비해 자연스럽지 않을 수 있다.