4

Google 피커를 페이지에 통합하려고합니다. 사용자는 선택기를 사용하여 Google 계정에 로그인하고 파일을 선택합니다. 아파치 HttpClient 라이브러리를 사용하여이 파일을 다운로드하려고합니다.HttpClient 라이브러리를 사용하여 Google 드라이브에서 파일을 다운로드하는 방법은 무엇인가요?

다음은 구현 세부 사항은 다음과 같습니다이 Google Tutorial에 강조로

나는 자바 스크립트에서 클라이언트 측 인증을 사용했다. 파일의 'fileId'가 확인되면 Google 드라이브 API를 사용하여 이름, 사용자, 날짜, downloadUrl, exportLink 등 파일 메타 데이터를 검색하기 위해 인증 된 GET을 수행했습니다. 위 링크를 사용하여 엔드 포인트를 테스트하고 fileId가 있으면 응답.

function postDownload (resp) { 
     var link; 
     var data = $.parseJSON (resp); 
     console.log (data.webContentLink); 
     if (data.mimeType == "application/pdf"){ 
      link = data.downloadUrl; 
     } else { 
      link = (data.exportLinks)['application/pdf']; 
     } 
     //I wish to use the below link to download the file on server side 
     //using HttpClient libraries. 
     console.log ("Download Link - " +link); 
    } 

    //Call back after a file is selected on the picker 
    function pickerCallback(data) { 
     if (data.action == google.picker.Action.PICKED) { 
      var id = data.docs[0].id; 
      var accessToken = gapi.auth.getToken().access_token; 
      console.log (id); 

      var xhr = new XMLHttpRequest(); 
      xhr.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id); 
      xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); 
      xhr.onload = function() { 
       postDownload(xhr.responseText); 
      }; 
      xhr.onerror = function() { 
       checkAuth(); 
      }; 
      xhr.send(); 
     } 
    } 

다운로드 코드 : 나는 브라우저 또는 우편 배달부 크롬 확장에 대한 링크를 사용하는 경우

import java.io.IOException; 
    import org.apache.http.Header; 
    import org.apache.http.HttpResponse; 
    import org.apache.http.client.methods.HttpGet; 
    import org.apache.http.impl.client.DefaultHttpClient; 

    public class DownloadFile { 

    public static void main(String[] args) throws IOException { 
     String link = "https://docs.google.com/uc? id=0ByJwoNOQMrO_S3hlWGRfa2JwVWM&export=download"; 

     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     HttpGet get = new HttpGet(link); 
     HttpResponse response = httpclient.execute(get); 

     Header[] headers = response.getAllHeaders(); 
     for (Header header : headers) { 
      System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue()); 
     } 
    } 

} 

, 나는 제대로 파일을 다운로드 할 수 있어요. REST 클라이언트는 들어오는 데이터를 'application/pdf'로 올바르게보고합니다.

그러나 위 Snippet을 사용하여 URL에서 HttpGet을 수행하면 들어오는 데이터의 콘텐츠 유형이 'text/html'입니다. 이 동작에 대한 단서가 없습니다. 파일을 다운로드하기 위해 최종 URL을 다르게 처리해야한다고 생각하지 않습니다.

아무도이 문제에 직면 했습니까? 미리 감사드립니다.

답변

0

인증 헤더를 추가하여 문제를 해결할 수있었습니다. auth 토큰은 브라우저의 사용자 세션에 저장되어 있으므로 URL을 눌러 파일을 다운로드 할 수있었습니다. 독립형 Java 프로그램의 경우 인증 토큰도 전달해야 할 수 있습니다.

아래 코드가 작동했습니다.

import java.io.IOException; 
import org.apache.http.Header; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class DownloadFile { 

    public static void main(String[] args) throws IOException { 
     String link = "https://docs.google.com/feeds/download/documents/export/Export?id=1vE4GVvVVipwMjKsc1q9p75LYWrRy8DZz0APjVFiHL9A"; 

     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     HttpGet get = new HttpGet(link); 
     // get.addHeader("Content-Type", "application/pdf"); 
     get.addHeader("Authorization", "Bearer 1vE4GVvVVipwMjKsc1q9p75LYWrRy8DZz0APjVFiHL9A"); 
     HttpResponse response = httpclient.execute(get); 

     Header[] headers = response.getAllHeaders(); 
     for (Header header : headers) { 
      System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue()); 
     } 
    } 
} 
+0

HttpClient 라이브러리를 다운로드하여 Objective c의 Google 드라이브에서 파일을 다운로드하는 방법. 아이디어가 있으면 plz가 응답합니다. – ChenSmile

관련 문제