2017-09-15 3 views
1

Je développe une application Web Java - JSF dans laquelle j'indique une fenêtre contextuelle permettant à l'utilisateur de choisir un document de Google Drive pour le télécharger.Je viens de récupérer un document Google Doc

Pour ce faire, j'ai un code 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> 

Le file.id arrive Bean et j'essaie de l'obtenir comme indiqué dans l'API G.Drive:

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

Mais Je reçois 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." 
} 
} 

Est-ce que quelqu'un sait pourquoi cela peut se produire? Merci d'avance.

EDIT: Je viens de comparer l'ID reçu avec celui donné par Google avec le lien du fichier et ils sont exactement les mêmes.

EDIT 2: Si je le fais driveService.files().list(); il retourne une liste vide.

Répondre

0

Comme Tanaike dit que je devais utiliser l'exportation au lieu de get, mais aussi executeAndDownloadTo au lieu de executeMediaAndDownloadTo

Il prestées:

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

Si vous souhaitez télécharger Google Docs, veuillez utiliser les fichiers.export. Pouvez-vous refléter le script suivant et l'essayer?

String fileId = "## file ID ##"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().export(fileId, "application/pdf") 
    .executeMediaAndDownloadTo(outputStream); 
  • Ce script exemple et les informations détaillées sont here.

Si je ne comprends pas votre question, je suis désolé.

+0

Merci pour votre réponse, mais il a donné la même erreur, 404 Fichier pas trouvé – Aldeguer

+0

@Aldeguer Je suis désolé pour la gêne occasionnée. J'ai vu votre EDIT2, juste maintenant. Puis-je vous demander si le fichier que vous souhaitez télécharger se trouve dans votre Google Drive? – Tanaike

+0

Oui, c'est, je le sélectionne à partir d'un doc de lecteur fait avec Google Picker et JS. J'ai essayé les deux, un fichier créé par moi et un autre créé par un copain mais partagé avec moi. Personne n'a travaillé – Aldeguer