2016-03-13 310 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

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