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

Azure Blob Storage 파일 다운로드

Azure의 Data Storage 서비스에는 Blob Storage, Table Storage, Queue Storage, File Storage 등이 있다. DEXTUploadX5는 Blob Storage 서비스에서 파일을 다운로드할 수 있는 기능을 제공한다.

DEXTUploadX5 제품이 Azure Blob Storage로부터 파일을 다운로드하기 위해서는, 서로 다른 출처끼리 통신을 허용해야 하기 때문에, 스토리지를 사용하는 계정의 Blob 서비스에 CORS 설정을 해주어야 한다. 업로드 및 다운로드 기능을 사용하기 위해서 HEAD, GET, POST, PUT, OPTIONS 요청 메소드와 content-type,x-request-with,x-ms-* 요청헤더를 허용해야 하고, 운영 시점에는 Allowed Origins 속성을 '*' 값으로 설정하지 않도록 주의해야 한다.

Azure Blob storage - CORS

컨테이너에 익명 접근이 허용된 경우

DEXTUploadX5의 단일 파일 다운로드 또는 다중 파일 다운로드 기능을 사용하여 파일을 다운로드할 수 있다. 가상 파일을 등록할 때 url 속성에 Azure Blob Storage에 있는 파일 객체의 URL을 설정하면 된다.

컨테이너에 보관된 파일(Blob)들은 다음과 같은 주소 체계를 가지고 접근할 수 있다.

https://{계정이름}.blob.core.windows.net/{컨테이너이름}/{Blob이름}
dx.addVirtualFile({ name: "서강대교_509147.jpg", size: 509147, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("서강대교_509147.jpg") });
dx.addVirtualFile({ name: "우도해변_239826.jpg", size: 239826, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("우도해변_239826.jpg") });
dx.addVirtualFile({ name: "코스모스 (빈공간) 195779.jpg", size: 195779, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("코스모스 (빈공간) 195779.jpg") });
공유액세스 토큰을 이용하여 다운로드하기

익명 접근이 허용되지 않는 환경에서 Azure Blob Storage로부터 파일을 직접 다운로드하기 위해서는 공유액세스 토큰이 사용해야 한다. 공유액세스 토큰은 보안을 위해서 백엔드에서 생성하여 DEXTUploadX5에 전달한다.

Azure Blob Storage로부터 다운로드하기 위해서는 다운로드 모드를 'AZRBS'로 설정하고, setAZRBSDownloadConfig 메소드를 사용하여 필요한 설정값들을 제공해야 한다.

dx.setDownloadMode("AZRBS");
dx.setAZRBSDownloadConfig({
    accountName: "photomanager",
    containerName: "photos",
    sasDownloadURL: "https://domain/path/get-download-sastoken"
});
dx.addVirtualFile({ name: "서강대교_509147.jpg", size: 509147, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("서강대교_509147.jpg") });
dx.addVirtualFile({ name: "우도해변_239826.jpg", size: 239826, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("우도해변_239826.jpg") });
dx.addVirtualFile({ name: "코스모스 (빈공간) 195779.jpg", size: 195779, url: "https://photomanager.blob.core.windows.net/photos/" + encodeURIComponent("코스모스 (빈공간) 195779.jpg") });

위 코드에서 accountName은 Azure Blob Storage 계정 이름, containerName은 Blob Storage 컨테이너 이름을 의미한다. sasDownloadURL은 공유액세스 토큰을 얻기 위한 URL이다.

플랫폼에 적합한 Azure Storage SDK를 이용하여 서버 측에서 파일 다운로드 과정에 필요한 공유액세스 토큰을 얻는 단계를 구현하면, 액세스키와 같은 보안 정보를 노출하지 않고서 파일 다운로드 과정만 DEXTUploadX5가 처리하도록 할 수 있다.

공유액세스 토큰을 얻는 과정을 이해하기 위해서 Java Web Application, ASP.NET 환경에서 사용가능한 예제들이 제공되므로, 제공된 예제를 참고하여 구현하도록 한다.

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

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-storage-blob</artifactId>
        <version>12.x.x</version>
    </dependency>
  • Java 그리고 Gradle를 사용하는 환경인 경우 Azure SDK를 얻는 법

    implementation 'com.azure:azure-storage-blob:12.x.x'
  • ASP.NET 환경인 경우 Azure Storage SDK를 얻는 법

    NuGet 패키지 관리자를 사용하여 Azure.Storage.Blobs 패키지를 설치하면, Azure.Identity.dll, Azure.Storage.Blobs.dll, Azure.Storage.Common.dll, netstandard.dll을 얻을 수 있다.

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

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

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

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

특징
  • 이어받기 기능을 지원한다.
  • Azure Blob Storage로부터 파일들을 다운로드하는 경우, 진행창에 표시되는 진행률이 타 다운로드 방식들에 비해 자연스럽지 않을 수 있다.
  • Azure 웹 콘솔을 사용하여 파일들을 살펴보면, 파일의 크기가 바이트 단위로 표시가 되지 않는다. 명확한 파일의 크기를 모를 경우, 다운로드 진행창에 표시되는 진행률이 올바르게 표시되지 않을 수 있다.