iOS 中的 Google Drive REST

问题描述 投票:0回答:1

我的问题很简单。 集成 Google Drive REST API 后,我终于可以从我的 Google Drive 下载文件了。所以我遵循了这个示例 https://developers.google.com/drive/v3/web/manage-downloads 一切工作正常,在控制台中我得到文件已下载的信息。那么问题来了:它去了哪里,到哪个文件夹?文件保存的路径是什么? 如果我需要将文件保存到 iOS Documents 文件夹,如何设置必要的保存路径?

NSString *fileId = @"0BwwA4oUTeiV1UVNwOHItT0xfa2M";

GTLRQuery *query = [GTLRDriveQuery_FilesGet queryForMediaWithFileId:fileId];
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDataObject *file,
                                                     NSError *error) {
    if (error == nil) {
        NSLog(@"Downloaded %lu bytes", file.data.length);
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];

我正在为 iOS 10 及更高版本进行开发,当我阅读信息时:注意:因为

NSURLConnection
从 iOS 9 和 OS X 10.11 开始已被弃用,所以此类已被
GTMSessionFetcher
取代。我应该使用 Google 提供的代码(上面发布的)或
GTMSessionFetcher
。我正在使用来自 Google 的代码,但如果有人能帮助我解决我的问题(Google 和
GTMSessionFetcher
)变体,我将不胜感激。

ios objective-c rest google-drive-api
1个回答
1
投票

UPD:适用于 Google API 客户端库

GTLRDataObject
具有
data
属性,其中包含文件的原始字节。 使用标准 iOS 方法足以保护您的文件。

还有

contentType
属性,它是文件的 MIME 类型 的字符串。您可能希望将此信息与保存的路径一起存储在某个地方
data
,它将帮助您正确显示它是什么类型的文件(图像/歌曲/文本),以及在解码/打开/时使用它读取保存的数据以呈现实际信息。

GTLRQuery *query = [GTLRDriveQuery_FilesGet queryForMediaWithFileId:fileId];
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                 GTLRDataObject *file,
                                                 NSError *error) {
    if (error == nil) {
        NSLog(@"Downloaded %lu bytes", file.data.length);

        // Here is where you take these bytes and save them as file to any location you want (typically your Documents folder)
        NSURL *documentsDirectoryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
        [file.data writeToURL:documentsDirectoryURL atomically:YES];

        // Now you can store the url/path of the saved file somewhere along with the MIME type string (maybe new class or structure describing the file in your app)
        MyFile *file = [[MyFile alloc] initWithFilePath:[documentsDirectoryURL path] mimeType:contentType];
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];

请参阅 CocoaDocs 以获取

GTLRDataObject
参考。


通用版本:使用iOS SDK

如果您使用

NSURLSession
,它具有委托方法,您可以使用该委托方法将文件从临时位置移动到您需要的任何地方。

Obj-C

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    // Use `location` to move your data to Documents directory or wherever else
}

斯威夫特

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    // Use `location` to move your data to Documents directory or wherever else
}
© www.soinside.com 2019 - 2024. All rights reserved.