직접 및 재개 가능한 미디어 업로드

이 문서에서는 Java용 Google API 클라이언트 라이브러리를 통해 직접 및 재개 가능한 미디어 업로드를 사용하는 방법을 설명합니다.

재개 가능한 미디어 업로드

서버에 대용량 미디어 파일을 업로드할 때 재개 가능한 미디어 업로드를 사용하여 파일 단위별로 파일을 전송하세요. Google API에서 생성한 라이브러리에는 재개 가능한 미디어 업로드와 상호작용하기 위한 편의 메서드가 포함되어 있습니다.

재개 가능한 미디어 업로드 프로토콜은 Google Drive API 문서에 설명된 재개 가능한 미디어 업로드 프로토콜과 유사합니다.

프로토콜 설계

다음 시퀀스 다이어그램은 재개 가능한 미디어 업로드 프로토콜이 작동하는 방식을 보여줍니다.
요청과 응답이 클라이언트와 서버 간에 이동하는 방식을 보여주는 시퀀스 다이어그램

구현 세부정보

관심 있는 기본 클래스는 MediaHttpUploaderMediaHttpProgressListener입니다.

서비스별로 생성된 라이브러리의 메서드가 검색 문서mediaUpload 매개변수를 포함하면 InputStreamContent를 매개변수로 사용하는 이러한 메서드의 편의 메서드가 생성됩니다. Google API 검색 서비스에서 미디어 업로드를 사용하는 방법에 관한 자세한 내용은 미디어 업로드를 참고하세요.

예를 들어 Drive APIinsert 메서드는 mediaUpload를 지원하며 다음 코드를 사용하여 파일을 업로드할 수 있습니다.

class CustomProgressListener implements MediaHttpUploaderProgressListener {
  public void progressChanged(MediaHttpUploader uploader) throws IOException {
    switch (uploader.getUploadState()) {
      case INITIATION_STARTED:
        System.out.println("Initiation has started!");
        break;
      case INITIATION_COMPLETE:
        System.out.println("Initiation is complete!");
        break;
      case MEDIA_IN_PROGRESS:
        System.out.println(uploader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Upload is complete!");
    }
  }
}

File mediaFile = new File("/tmp/driveFile.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
request.execute();

서비스별로 생성된 라이브러리 없이도 재개 가능한 미디어 업로드 기능을 사용할 수 있습니다. 다음 예를 참고하세요.

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

미디어 직접 업로드

재개 가능한 미디어 업로드는 기본적으로 사용 설정되어 있지만 사용 중지하고 대신 직접 미디어 업로드를 사용할 수도 있습니다(예: 작은 파일을 업로드하는 경우). 직접 미디어 업로드는 Java용 Google API 클라이언트 라이브러리의 1.9.0-beta 버전에서 도입되었습니다.

직접 미디어 업로드는 여러 요청으로 파일을 업로드하는 재개 가능한 미디어 업로드 프로토콜과 달리 전체 파일을 하나의 HTTP 요청으로 업로드합니다. 직접 업로드를 수행하면 HTTP 요청 수가 줄어들지만 대용량 업로드에서 발생할 수 있는 실패 (예: 연결 실패)가 발생할 가능성이 커집니다.

미디어 직접 업로드 사용법은 위에서 설명한 재개 가능한 미디어 업로드와 동일합니다. 또한 MediaHttpUploader에 직접 업로드만 실행하도록 지시하는 다음 호출이 더 있습니다.

mediaHttpUploader.setDirectUploadEnabled(true);