Zol*_*kei 5 dart google-drive-api flutter
我的 Google Drive 上有一个公共(知道链接的任何人都可以查看)文件,我想在我的 Android 应用程序中使用它的内容。
从我目前收集到的信息来看,我需要 fileID、OAuth 令牌和客户端 ID - 这些我已经得到了。但我无法弄清楚授权应用程序或获取文件的确切方法是什么。
编辑:
简单地使用 file.readAsLines 读取它是行不通的:
final file = new File(dogListTxt);
Future<List<String>> dogLinks = file.readAsLines();
return dogLinks;
Run Code Online (Sandbox Code Playgroud)
dogLinks 变量未填充任何数据,但我未收到任何错误消息。
我尝试的另一种方法是遵循这个示例,但这是一个基于 Web 的应用程序,具有显式授权请求(由于某种原因,我永远无法导入 dart:html 库)。
最好的解决方案是如果它可以无缝完成,因为我会在应用程序启动时将内容存储在列表中,并在手动刷新按钮按下时重新阅读。
我在这里找到了几个旧的解决方案,但是这些方法中描述的方法似乎不再适用(从 4-5 年前开始)。
是否有关于在用 dart 编写的 Flutter 应用程序中集成 Drive API 的良好分步教程?
我在这方面遇到了很多麻烦,这似乎比应该的要困难得多。这也仅适用于 TXT 文件。您需要将 files.export() 用于其他文件。
首先你需要得到一个文件列表。
ga.FileList textFileList = await drive.files.list(q: "'root' in parents");
Run Code Online (Sandbox Code Playgroud)
然后你需要根据 ID 获取这些文件(这是针对 TXT 文件的)
ga.Media response = await drive.files.get(filedId, downloadOptions: ga.DownloadOptions.FullMedia);
Run Code Online (Sandbox Code Playgroud)
接下来是凌乱的部分,您需要将您的媒体对象流转换为文件,然后从中读取文本。(@Google,请让这更容易。)
List<int> dataStore = [];
response.stream.listen((data) {
print("DataReceived: ${data.length}");
dataStore.insertAll(dataStore.length, data);
}, onDone: () async {
Directory tempDir = await getTemporaryDirectory(); //Get temp folder using Path Provider
String tempPath = tempDir.path; //Get path to that location
File file = File('$tempPath/test'); //Create a dummy file
await file.writeAsBytes(dataStore); //Write to that file from the datastore you created from the Media stream
String content = file.readAsStringSync(); // Read String from the file
print(content); //Finally you have your text
print("Task Done");
}, onError: (error) {
print("Some Error");
});
Run Code Online (Sandbox Code Playgroud)
目前没有很好的分步教程,但使用https://developers.google.com/drive/api/v3/manage-downloads作为参考指南,通过https://developers.google.com/drive/api/v3/manage-downloads在 Dart/Flutter 中使用哪些方法/pub.dev/packages/googleapis:要下载或读取 Google Drive 文件的内容,您应该使用googleapis/Drive v3 ,或者具体来说,使用FilesResourceApi类中的方法。
/// Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB./// Gets a file's metadata or content by ID.简化示例:
var drive = new DriveApi(http_client);
drive.files.get(fileId).then((file) {
// returns file
});
Run Code Online (Sandbox Code Playgroud)
然而,我发现这个 Dart-GoogleAPIs 库似乎缺少相当于executeMediaAndDownloadTo(outputStream). 在最初的 Google Drive API v3 中,此方法将alt=mediaURL 参数添加到底层 HTTP 请求中。否则,你会收到错误,这就是我所看到的:
403、消息:导出需要 alt=media 才能下载导出的内容。
而且我无法找到另一种方法将该 URL 参数插入到当前请求中(也许其他人知道?)。因此,作为替代方案,您必须求助于实现自己的 Dart API 来完成相同的操作,正如该 OP 在此处所做的暗示的那样https://github.com/dart-lang/googleapis/issues/78:CustomDriveApi
所以你会:
alt=mediaexecuteMediaAndDownloadTo(outputStream)(注意,我没有测试googleapis/Drive v2,但对相同方法的快速检查看起来它们缺少相同的东西)
| 归档时间: |
|
| 查看次数: |
6517 次 |
| 最近记录: |