2016-09-07 5 views
1

Google 드라이브에서 파일을 다운로드하려면 this method을 사용하고 있습니다.REST API를 사용하여 Google 드라이브에서 다운로드되는 파일의 진행 상황을 확인하는 방법은 무엇입니까?

내 코드 :

 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     driveService.files().export(remoteFiles[0].getId(),"text/plain").executeMediaAndDownloadTo(byteArrayOutputStream); 


     FileOutputStream fileOutputStream= new FileOutputStream(new File(downloadsDirectory,remoteFiles[0].getName())); 


     byteArrayOutputStream.writeTo(fileOutputStream); 

     byteArrayOutputStream.flush(); 

     byteArrayOutputStream.close(); 
     fileOutputStream.close(); 

는 파일 다운로드의 진행을 얻을 수있는 방법이 있나요?

답변

2

내 질문에 답변을 발견하면 on this page입니다.

//custom listener for download progress 
class DownloadProgressListener implements MediaHttpDownloaderProgressListener{ 


    @Override 
    public void progressChanged(MediaHttpDownloader downloader) throws IOException { 
     switch (downloader.getDownloadState()){ 

      //Called when file is still downloading 
      //ONLY CALLED AFTER A CHUNK HAS DOWNLOADED,SO SET APPROPRIATE CHUNK SIZE 
      case MEDIA_IN_PROGRESS: 
       //Add code for showing progress 
       break; 
      //Called after download is complete 
      case MEDIA_COMPLETE: 
       //Add code for download completion 
       break; 
     } 
    } 
} 


//create a Drive.Files.Get object, 
//set a ProgressListener 
//change chunksize(default chunksize seems absurdly high) 
Drive.Files.Get request = driveService.files().get(remoteFiles[0].getId()); 
request.getMediaHttpDownloader().setProgressListener(new DownloadProgressListener()).setChunkSize(1000000); 
request.executeMediaAndDownloadTo(outputStream); 
0

가장 먼저 생각해 볼 수있는 것은 write 메서드를 재정의하는 FileOutputStream을 사용자 지정 스트림에 래핑하여 작성된 바이트 양에 대한 청취자를 추가로 알리는 것입니다. 이와 같이 :

나머지는 진행률 수신기의 진행률을 계산할 수 있도록 파일 크기를 알아야합니다.

+0

어떻게 작동합니까? ByteArrayOutputStream.writeTo() 메서드를 호출하고 있습니다. ByteArrayOutputStream을 확장해야합니까? – Guest1997

+0

@ Guest1997 : https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html#writeTo(java.io.OutputStream) - "이 바이트 배열 출력 스트림의 전체 내용을 씁니다 OUT.write (buf, 0, count)를 사용해 출력 스트림의 write 메소드를 호출했을 경우와 같이, 지정된 출력 스트림 인수에 " – stan0

+0

나는 이것을 시도했다, 진행은 0에 잠시 동안 다음 갑자기 0에서 100 %로 바로 점프. 무슨 일이 일어나고있는이 방법은 실제 다운로드 대신 디스크 쓰기를 측정하고 있다고 생각합니다. 데이터가 – Guest1997