Dart / flutter:下载或阅读Google云端硬盘文件的内容

时间:2018-04-04 05:31:37

标签: google-drive-api dart flutter

我的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的详细分步教程?

2 个答案:

答案 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类中的方法。

  • drive.files.export()(如果这是Google文档)
    • /// Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB.
  • drive.files.get(),如果还有其他说明,则为非Gdoc文件
    • /// 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/78CustomDriveApi

所暗示

因此您将:

  1. 使用您自己的HttpClient实现通过Dart进行操作,并尝试紧跟REST flow from Dart-GoogleAPIs,但要记住包括alt=media
  2. implement and integrate您自己的本机Android / iOS代码,并使用原始SDK的便捷executeMediaAndDownloadTo(outputStream)

(请注意,我没有测试googleapis/Drive v2,但是快速检查相同的方法似乎会丢失相同的东西)