谷歌驱动api出口

问题描述:

我是新的谷歌api。我的目标是将文档(doc,docx)从服务器上传到谷歌驱动器,而无需任何客户端审批流程。一旦上传,我想将其导出为pdf文件。谷歌驱动api出口

我创建了一个服务帐户。上传本身工作正常。能够下载上传的文件。当我试图从驱动器中导出文档时,出现以下错误。

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

我使用google驱动api v2 php库。这是我用于导出的代码。

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

是不是可以从谷歌驱动器出口? 'ExportonlysupportsGoogleDocs'是什么手段?我错过了什么?

感谢您的关注和任何意见表示赞赏。

由于错误消息表示只能导出“Google文档”文档。上传的文档应该有一个mime类型given here

对于(Doc,Docx)用mimeType“application/vnd.google-apps.document”上传并尝试导出为pdf。

+0

感谢您的回复。 'convert'=>'true'做了诀窍。 – Showup

您只需将Google文档mimeType指定为Drive文件即可。

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

而且,400: Bad Request意味着它是User error。这可能意味着未提供必填字段或参数,提供的值无效,或提供的字段组合无效。

尝试将重复的父级添加到Drive项目时可能会引发此错误。当试图添加一个可以在目录图中创建一个循环的父代时,它也会被抛出。

官方文档使用建议exponential backoff指数回退是网络应用程序的标准错误处理策略,其中客户端在日益增长的时间内定期重试失败的请求。如果大量请求或繁重网络流量导致服务器返回错误,指数退避可能是处理这些错误的好策略。相反,处理与速率限制,网络数量或响应时间无关的错误(如无效授权证书或文件未发现错误)并不是相关策略。

+0

谢谢你的回应。我确实指定了mimeType。经过几个小时的工作,我发现上传时错过了'convert'=>'true'。这是诀窍。没有这个声明谷歌不会让我出口到其他格式。 – Showup