[중요] File Storage 설명서 문서 지원 종료 (Deprecated) 안내


  • 네이버 클라우드 플랫폼 서비스 정책상 장기적으로 File Storage는 서비스 및 유지보수 지원을 중지할 계획입니다.

    • 현재 이용중인 서비스에는 문제가 없도록 유지할 계획이지만, 부가 기능 및 연동 상품 이용 개선에 대해서는 제약이 있을 수 있습니다.
  • 편리한 기능 제공과, 상품간 원활한 인터페이스 및 연동을 위해서 Object Storage로 전환하는 것을 고객분들께 권고드립니다.

    • 단기적으로 Object Storage로 전환이 어려우시더라도 중장기적으로 Object Storage로의 전환에 대해 긍정적으로 검토 부탁드립니다.
    • Object Storage로 전환하실 때 필요하신 데이터 이관 등은 저희가 최대한 지원해드리도록 하겠습니다.

File Storage에서 Object Storage로의 마이그레이션에 대해서는 고객지원으로 문의하여 주시기 바랍니다.

사전 준비 사항

파일스토리지 Java library에서는 컨테이너에 대한 생성, 삭제 및 인증키 관련된 기능이 포함되어 있지 않습니다.
사용자는 서비스 홈페이지에 접속해서 컨테이너 및 인증 키를 생성해야 합니다.

  • 컨테이너 생성
    서비스에 가입한 후 네이버 클라우드 플랫폼 file storage 상품을 구매해서 컨테이너를 생성해야 합니다.

  • 인증키 생성
    네이버 클라우드 플랫폼 서비스 계정 생성 시 발급되는 API 인증 키를 이용하거나 추가적으로 API 인증 키를 생성합니다.
    인증 키는 access key 및 secrete key로 분리되어 있으며, 파일스토리지 Java library를 사용하는 사용자는 두 key 값을 모두 알고 있어야 합니다.

Java Library

배포되는 Java library는 다음과 같이 구성됩니다.

  • doc: Java doc 파일
  • lib: 파일스토리지 library 및 의존 관계에 있는 library

파일스토리지는 다음과 같은 외부 라이브러리에 대한 의존성이 있습니다.

프로그램 작성

파일스토리지 프로그램 작성을 기능별로 설명합니다.

  • 모듈 리소스 초기화 및 제거
    파일스토리지 Java API는 HTTP connection을 관리하는 관리 기능을 초기화하는 것으로 시작합니다.

    import com.ncloud.filestorage.FSRestClient;
    import com.ncloud.filestorage.model.*;
    …
    FSRestClient.initialize();
    

    FSRestClient은 com.ncloud.filestorage.model.FSClient 인터페이스를 구현한 클래스로서, 파일스토리지 기능을 사용하는 데 있어서 핵심이 되는 클래스입니다.
    나머지 클래스는 FSClient 인터페이스를 구현하는데 있어서 보조적인 역할을 합니다.
    FSRestClient.initialize() static method는 웹 서버와의 연결을 위해 사용할 연결 관리자 (connection pool manager)를 초기화하는 역할을 합니다.
    모듈을 초기화하지 않고 API를 사용하는 경우 FSClientException이 발생합니다.
    모듈 사용이 더 이상 필요하지 않은 경우 FSRestClient.destroy() static method를 호출합니다.

  • 서버 접속
    접속할 REST 서버에 대한 연결 정보 및 인증 키 (access key, secrete key)를 이용해 FSRestCleint 객체를 생성합니다.

    FSRestClient client;
    client = new FSRestClient(<호스트명>, <포트 번호>, <access key>, <secrete key>);
    

    해당 클래스는 thread safe 하며, 모듈의 connection pool 기능을 사용합니다.

  • 업로드 예제
    서버 접속까지 완료된 경우에는 FSRestClient에서 정의된 method를 호출해서 파일스토리지에서 제공하는 서비스를 사용할 수 있습니다.
    다음 코드는 파일 업로드 예제입니다.

    import com.ncloud.filestorage.FSRestClient;
    import com.ncloud.filestorage.model.*;
    ….
    //모듈 초기화
    FSRestClient.initialize();
    // 호스트, 포트는 파일스토리지 REST 서버에 대한 접속 정보
    // API 키는 미리 알고 있어야 한다
    FSRestClient client = new FSRestClient(<호스트명>, <포트 번호>, <access key>, <secrete key>);
    try {
    // 컨테이너 이름은 구매한 이름을 사용해야 한다
    FSResourceID rid = new FSResourceID("<컨테이너 이름>/test.txt");
    //간단한 string을 만들어 java.io.InputStream 객체를 만든다
    String content = "This is test";
    InputStream ins = new ByteArrayInputStream(content.getBytes());
    //저장할 파일 내용과 content-type을 지정한다
    FSUploadSourceInfo info = new FSUploadSourceInfo(ins, "text/plain",
              content.getBytes().length, null);
    //파일을 업로드한다
    FSUploadFileResult result = client.uploadFile(rid, info);
    } catch (FSClientException e) {
    // 클라이언트 단에서 발생한 exception
    } catch (FSServiceException e) {
    // 서비스 단에서 발생한 exception
    }
    //더 이상 사용하지 않는 경우 초기화 시 생성한 resource를 제거한다
    FSRestClient.destroy();
    
  • 대용량 파일 업로드 예제
    파일 스토리지의 업로드 대상 파일이 2GB보다 큰 경우, 라지 파일 업로드 기능으로 업로드할 수 있습니다.
    다음은 라지 파일 업로드 예제입니다.

    import com.ncloud.filestorage.FSRestClient;
    import com.ncloud.filestorage.model.*;
    ….
    
    //모듈 초기화
    File file = new File(<업로드대상 파일 경로>);
    
    // 업로드 대상 파일이 존재하는지 여부 체크
    if (null == file || false == file.isFile()){
        return false;
    }
    FSRestClient.initialize();
    
    // 호스트, 포트는 파일스토리지 REST 서버에 대한 접속 정보
    // API 키는 미리 알고 있어야 한다
    FSRestClient client = new FSRestClient(<호스트명>, <포트 번호>, <accessKey>, <secretKey>);
    // fileMimeType : 업로드 대상 파일의 content-type을 설정합니다.
    // mime 참조 : https://ko.wikipedia.org/wiki/MIME#Content-Type
    FSLargeFileInitiateRequest request = new FSLargeFileInitiateRequest(fileMimeType, null);
    
    // 컨테이너 이름은 구매한 이름을 사용해야 한다, 파일명을 업로드할 파일명으로 설정합니다.
    FSResourceID rid = new FSResourceID(<컨테이너 이름>+"/"+<파일명>);
    try{
    
        // 라지 파일 업로드를 위한 초기화를 합니다.
        client.largeFileInitiate(rid, request);
        long SEPARATE_FILE_SIZE_2G = 2147483647;
    
        LinkedList<FSPartCompletionInfo> partCompletionInfos = new LinkedList<FSPartCompletionInfo>();
        long partFileSize = 0;
        int separateCount = 1;
        boolean existFilePart = true;
    
        // 파일을 2G 단위로 짤라서 부분 파일로 업로드합니다. 단 파일사이즈가 2G 이상인 경우
        while( existFilePart ){
            partFileSize = SEPARATE_FILE_SIZE_2G * separateCount;
        if(file.length() < partFileSize){
            existFilePart = false;
            String temp = Long.toString(file.length() - (SEPARATE_FILE_SIZE_2G * (separateCount -1)));
                lastSize = Integer.parseInt(temp);
        }
        // 파일을 짤라서 부분파일로 업로드합니다.
        eTag = partUpload(rid, separateCount, lastSize, client);
        partCompletionInfos.add(new FSPartCompletionInfo(separateCount, eTag));
        separateCount++;
        }
    
        // 전체 업로드가 완료되면 라지 파일 업로드 작업 완료를 호출합니다.
        if( partCompletionInfos.size() > 0){
            client.largeFileComplete(rid, null, partCompletionInfos);
        }
    }catch (Exception e) {
        // 업로드가 실패하면 라지 파일과 관련된 파일을 삭제합니다.
        client.largeFileAbort(rid, null);
    }
    
    // 더 이상 사용하지 않는 경우 초기화 시 생성한 resource를 제거합니다.
    FSRestClient.destroy();
    
    private String partUpload(FSResourceID rid, int partNum, int lastPartSize, FSRestClient client) throws Exception {
            FSUploadPartResult uploadResult;
        BufferedInputStream ins = null;
        long readByteSize = lastPartSize == 0 ? SEPARATE_FILE_SIZE_2G  : lastPartSize;
        try {
                // 업로드 대상 파일 경로를 설정합니다.
                ins = new BufferedInputStream(new FileInputStream(<file>));
                long startOff = 0;
                if( 1 < partNum ){
                    startOff = SEPARATE_FILE_SIZE_2G * (partNum - 1);
                }
    
                // 전체 파일 중 파일을 일부분만 추출하기 위해서 이전에 업로드 했던 내용은 skip 합니다.
                ins.skip(startOff);
    
               // 전체 파일 중 일부분을 추출해서 업로드합니다.
               FSPartUploadSourceInfo srcInfo = new FSPartUploadSourceInfo(partNum, readByteSize, ins);
               uploadResult = client.largeFileUploadPart(rid, null, srcInfo);
       } catch (Exception e) {
               throw e;
       } finally {
               if( ins != null)
                   ins.close();
               ins.close();
       }
           return uploadResult.getETag();
        }
    

연관 정보 바로가기

아래 가이드에서 연관 정보를 확인할 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...