2016-03-13 309 views
1

這樣,我成功下載一個圖像:如何在谷歌驅動器sdk下載谷歌文件?

GTLServiceDrive *drive = ...; 
GTLDriveFile *file = ...; 
NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/drive/v3/files/%@?alt=media",file.identifier]; 
GTMSessionFetcher *fetcher = [drive.fetcherService fetcherWithURLString:url]; 
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { 
    if (error == nil) { 
    NSLog(@"Retrieved file content"); 
    // Do something with data 
    } else { 
    NSLog(@"An error occurred: %@", error); 
    } 
}]; 

谷歌驅動器的SDK告訴我下載一個PDF或谷歌文檔應該使用其他網址的文件:

NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/drive/v3/files/%@/export?alt=media&mimeType=application/pdf",file.identifier]; 

但我失敗了,錯誤是這樣的:

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

回答

0

在下載文件時,請確保您的應用程序必須授權一個允許讀取文件內容的範圍。例如,使用drive.readonly.metadata範圍的應用程序將無權下載文件內容。具有編輯權限的用戶可以通過將viewersCanCopyContent字段設置爲true來限制只讀用戶的下載。

還有另一種通過使用部分下載來下載文件的方法。它涉及只下載文件的指定部分。您可以通過使用Range標頭的字節範圍來指定要下載的文件的部分。

This SO question正在用部分下載。我認爲它可以幫助你。

此代碼演示如何下載PDF格式的Google文檔。

String fileId = "1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().export(fileId, "application/pdf") 
     .executeMediaAndDownloadTo(outputStream); 
+0

是的,你是對的,我也找到了。 –