我的Google云端硬盘上有一个公开(链接可以查看的任何人)文件,我想在我的Android应用中使用它的内容。
从目前为止我收集到的内容,我需要fileID,OAuth令牌和客户端ID - 这些我已经得到了。但我无法弄清楚授权应用程序或获取文件的确切方法是什么。
编辑:
只需使用file.readAsLines读取它就不起作用了:
final file = new File(dogListTxt);
Future<List<String>> dogLinks = file.readAsLines();
return dogLinks;
dogLinks变量没有填充任何数据,但我没有收到任何错误消息。
我尝试的另一种方法是关注this example,但这是一个基于Web的应用程序,带有显式授权请求(由于某种原因,我永远无法导入dart:html库)。
最好的解决方案是,如果它可以无缝完成,因为我会在应用程序启动时将内容存储在List中,并在按下手动刷新按钮时重新阅读。
我在这里找到了几个旧解决方案,但这些方法中描述的方法似乎不再适用(从4 - 5年前开始)。
是否有关于在使用dart编写的flutter应用程序中集成Drive API的详细分步教程?
答案 0 :(得分:5)
我对此有很多麻烦,似乎比应该做的要难得多。这也仅适用于TXT文件。您需要将files.export()用于其他文件。
首先,您需要获取文件列表。
ClickOnce
然后您需要根据ID获取这些文件(这是TXT文件)
ga.FileList textFileList = await drive.files.list(q: "'root' in parents");
下一步是麻烦的部分,您需要将Media对象流转换为File,然后从中读取文本。 (@Google,请简化此操作。)
ga.Media response = await drive.files.get(filedId, downloadOptions: ga.DownloadOptions.FullMedia);
答案 1 :(得分:0)
当前没有好的分步教程,但是使用https://developers.google.com/drive/api/v3/manage-downloads作为通过https://pub.dev/packages/googleapis在Dart / Flutter中使用哪些方法的参考指南:下载或读取广告内容Google云端硬盘文件,您应该使用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
});
但是,我发现该Dart-GoogleAPIs库似乎缺少与executeMediaAndDownloadTo(outputStream)
等效的方法。在原始的Google Drive API v3中,此方法将alt=media
URL参数添加到基础HTTP请求中。否则,您将得到错误,这就是我所看到的:
403,消息:导出需要alt = media来下载导出的 内容。
而且我找不到其他方法可以将该URL参数插入当前请求中(也许有人知道吗?)。因此,作为替代方案,您必须依靠实现自己的Dart API来执行相同的操作,此操作在这里https://github.com/dart-lang/googleapis/issues/78:CustomDriveApi
因此您将:
alt=media
executeMediaAndDownloadTo(outputStream)
(请注意,我没有测试googleapis/Drive v2,但是快速检查相同的方法似乎会丢失相同的东西)