2016-07-15 15 views
1

Ich bin neu bei google api. Mein Ziel ist es, ein Dokument (doc, docx) von einem Server auf Google Drive hochzuladen, ohne einen Genehmigungsprozess des Kunden. Sobald es hochgeladen wurde, wollte ich es als PDF-Datei exportieren.google drive api export

Ich habe ein Dienstkonto erstellt. Das Hochladen selbst funktioniert gut. Kann das hochgeladene Dokument herunterladen. Als ich versuchte, das Dokument vom Laufwerk zu exportieren, erhalte ich den folgenden Fehler.

{ 
    "error": { 
    "errors": [ 
     { 
     "domain": "global", 
     "reason": "badRequest", 
     "message": "ExportonlysupportsGoogleDocs." 
     } 
    ], 
    "code": 400, 
    "message": "ExportonlysupportsGoogleDocs." 
    } 
} 

ich benutze die Google Drive API v2 php Bibliothek. Hier ist der Code, den ich für den Export verwendet habe.

$tempUrl = "https://www.googleapis.com/drive/v2/files/xxxx/export?mimeType=application%2Fpdf"; 
    $request = new Google_Http_Request($tempUrl, 'GET', null, null); 
    $httpRequest = $service->getClient()->getAuth()->authenticatedRequest($request); 

    if ($httpRequest->getResponseHttpCode() == 200) { 
     $newFile = 'downLoaded.pdf'; 
     file_put_contents($newFile, $httpRequest->getResponseBody()); 
    } else { 
     var_dump($httpRequest->getResponseBody()); 
    } 

Ist es nicht möglich, von Google Drive zu exportieren? Was bedeutet "ExportonlysupportsGoogleDocs" meint? Was vermisse ich?

Vielen Dank für Ihr Interesse und jeder Kommentar ist willkommen.

Antwort

0

Wie die Fehlermeldung besagt, können nur "Google Docs" -Dokumente exportiert werden. Das hochgeladene Dokument sollte einen der MimeTypes given here haben.

Für (Doc, Docx) mit mimeType "application/vnd.google-apps.document" hochladen und versuchen, als PDF zu exportieren.

+0

Vielen Dank für Ihre Antwort. 'convert' => 'true' hat den Trick gemacht. – Showup

0

Sie müssen nur die Google-Dokumentation mimeType als Drive-Datei angeben.

File fileMetadata = new File(); 
fileMetadata.setName("My Report"); 
fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet"); 

java.io.File filePath = new java.io.File("files/report.csv"); 
FileContent mediaContent = new FileContent("text/csv", filePath); 
File file = driveService.files().create(fileMetadata, mediaContent) 
.setFields("id") 
.execute(); 
System.out.println("File ID: " + file.getId()); 

Und bedeutet die 400: Bad Request, dass es User error ist. Dies kann bedeuten, dass ein erforderliches Feld oder Parameter nicht angegeben wurde, der angegebene Wert ungültig ist oder die Kombination der bereitgestellten Felder ungültig ist.

Dieser Fehler kann ausgelöst werden, wenn versucht wird, einem Laufwerkselement einen doppelten übergeordneten Element hinzuzufügen. Es kann auch ausgelöst werden, wenn versucht wird, ein übergeordnetes Element hinzuzufügen, das im Verzeichnisdiagramm einen Zyklus erstellt.

Offizielle Dokumentation zu verwenden exponential backoff, Exponential Backoff ist eine Standard-Fehlerbehandlung Strategie für Netzwerkanwendungen, in denen der Client wiederholt eine fehlgeschlagene Anfrage über einen zunehmenden Zeitraum wiederholt. Wenn eine hohe Anzahl von Anforderungen oder starker Netzwerkverkehr dazu führt, dass der Server Fehler zurückgibt, ist eine exponentielle Verzögerung möglicherweise eine gute Strategie zum Behandeln dieser Fehler. Umgekehrt ist dies keine relevante Strategie für den Umgang mit Fehlern, die nicht mit Ratenbegrenzungen, Netzwerkvolumes oder Antwortzeiten zusammenhängen, z. B. ungültige Autorisierungsberechtigungsnachweise oder Dateifehler nicht gefunden.

+0

Vielen Dank für die Antwort. Ich habe den MimeType angegeben. Nach einigen Stunden Arbeit habe ich herausgefunden, dass ich beim Hochladen "convert" => "true" vermisst habe. Dies macht den Trick. Ohne diese Aussage lässt mich Google nicht in andere Formate exportieren. – Showup