2017-09-15 101 views
1

我正在開發一個Java-JSF Web應用程序,其中顯示一個彈出窗口,以便讓用戶從Google Drive中選擇一個文檔進行下載。從剛剛檢索到的id獲取Google Doc

爲了做到這一點,我有一些JS代碼:

<script src="filepicker.js"></script> 
<script> 
    function initPicker() { 
     var picker = new FilePicker({ 
      apiKey: 'MY_API_KEY', 
      clientId: my_client_id, 
      buttonEl: document.getElementById('pick'), 
      onSelect : function(file) { 
         if (file.id) { 
          sendLinkToBean(file.id); 
         } else { 
          alert('Unable to download file.'); 
         } 
        } 
       }); 
    } 
</script> 

<a4j:jsFunction name="sendLinkToBean" action="#{gPPersonFormBean.downloadFile()}"> 
    <a4j:param name="param1" assignTo="#{gPPersonFormBean.fileId}"/> 
</a4j:jsFunction> 

的file.id到達豆,我設法得到它,如圖G.Drive的API:

public void downloadFile(){ 
    try { 
     Drive driveService = getDriveService(); 
     OutputStream outputStream = new ByteArrayOutputStream(); 
     driveService.files().get(fileId) .executeMediaAndDownloadTo(outputStream); 
    } catch (IOException e) { 
     String mess = "downloadFile(): " 
       + (e.getMessage()!=null?". "+e.getMessage():"") 
       + (e.getCause()!=null?". "+e.getCause():""); 
     logger.error(mess); 
    } 
} 

但我得到FileNotFoundException:

com.google.api.client.http.HttpResponseException: 404 Not Found 
{ 
"error": {"theID" 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "notFound", 
    "message": "File not found: 1tvnGWDCse4TFQwIvqEDTlvv2cebfs0C2JBtjTP5A42I.", 
    "locationType": "parameter", 
    "location": "fileId" 
    } 
    ], 
    "code": 404, 
    "message": "File not found: theID." 
} 
} 

有誰知道爲什麼會發生這種情況? 在此先感謝。

編輯:我剛剛收到的ID與Google給出的ID與文件鏈接進行了比較,它們完全相同。

編輯2:如果我做driveService.files().list();它返回一個空的列表。

回答

0

正如Tanaike說,我不得不使用出口而不是GET也executeAndDownloadTo代替executeMediaAndDownloadTo

所以它的工作是:

String fileId = "## file ID ##"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().export(fileId, "application/pdf") 
    .executeAndDownloadTo(outputStream); 
1

如果您要下載Google文檔,請使用files.export。你能反映下面的腳本並嘗試它嗎?

String fileId = "## file ID ##"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().export(fileId, "application/pdf") 
    .executeMediaAndDownloadTo(outputStream); 
  • 此示例腳本和細節信息是here

如果我誤解了你的問題,我很抱歉。

+0

謝謝您的回答,但它給了同樣的錯誤,404文件找不到 – Aldeguer

+0

@Aldeguer對於給您帶來的不便,我深表歉意。剛纔我看到了你的EDIT2。我可以問你想下載的文件是否在你的Google Drive中? – Tanaike

+0

是的,我從Google Picker和JS製作的驅動器文檔中選擇它。我已經嘗試了兩種,一種是由我創建的文件,另一種是由同伴創建的文件,但與我共享。沒有人工作 – Aldeguer

相關問題