2017-09-15 3 views
1

Ich entwickle eine Java - JSF - Webanwendung, in der ich ein Popup zeige, damit der Benutzer ein Dokument aus Google Drive auswählen kann, um es herunterzuladen.Google Doc von der ID abrufen

, das zu tun, ich habe einige js Code:

<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> 

Die file.id kommt das Bean und ich versuche, es zu erhalten, wie in G.Drive API gezeigt:

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); 
    } 
} 

Aber Ich bekomme 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." 
} 
} 

Weiß jemand, warum dies passieren könnte? Vielen Dank im Voraus.

EDIT: Ich habe gerade die ID mit der von Google mit der Datei angegebenen Link erhalten und sie sind genau das gleiche.

BEARBEITEN 2: Wenn ich driveService.files().list(); mache, wird eine leere Liste zurückgegeben.

Antwort

0

Wie Tanaike sagte ich Export statt get verwenden musste aber executeAndDownloadTo auch anstelle executeMediaAndDownloadTo von

So funktionierte es sein:

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

Wenn Sie Google Docs herunterladen möchten, verwenden Sie bitte files.export. Können Sie das folgende Skript reflektieren und ausprobieren?

String fileId = "## file ID ##"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().export(fileId, "application/pdf") 
    .executeMediaAndDownloadTo(outputStream); 
  • Dieses Skript Probe und die Detailinformationen sind here.

Wenn ich deine Frage falsch verstehe, tut mir leid.

+0

Vielen Dank für Ihre Antwort, aber es gab den gleichen Fehler, 404 Datei nicht gefunden – Aldeguer

+0

@Aldeguer Es tut mir leid für die Unannehmlichkeiten. Ich habe gerade dein EDIT2 gesehen. Kann ich Sie fragen, ob die Datei, die Sie herunterladen möchten, in Ihrem Google Drive ist? – Tanaike

+0

Ja, es ist, ich wähle es aus dem Dokument eines Laufwerks mit Google Picker und JS. Ich habe beide versucht, eine Datei, die von mir erstellt wurde, und andere, die von einem Partner erstellt, aber mit mir geteilt wurden. Niemand hat gearbeitet – Aldeguer