android - 如何使用 Google Drive 将文件从 Linux 传输到 Android

标签 android rest android-download-manager drive

环境:

我有一个由 Android 客户端和 Linux 服务器组成的系统。文件(jpeg 图像)通过 Google 驱动器 OK 从 Android 客户端传输到 Linux 服务器。

  • 客户端使用 Drive API 将文件上传到 Google Drive 上的 ServerUploads 文件夹
  • 客户端通过 GCM (Google Cloud Messaging) 将文件通知服务器
  • Server 上的 ServiceAccount 通过 REST API 读取文件

我的传输工作正常。

稍后服务器需要根据搜索条件、位置、 View 区域等将文件 (jpeg) 发送给其他客户端。因此我尝试逆向流程将 jpeg 文件传输给客户端。

  • Linux 服务器上的服务帐户将文件上传到 Google Drive 上的 ClientDownload 文件夹
  • 服务器通过 GCM 通知客户端该文件
  • 客户端尝试通过 Drive API 下载文件但由于保护而失败

应用程序和 ServiceAccount 都与开发者控制台中的应用程序相关联。

与 App 和 ServiceAccount 关联的电子邮件是不同的域。 (这不是 Google Apps for Work。)

问题: 由于较新的带有 Google Play 服务的 Android Drive API 仅支持 Drive.SCOPE_FILE,该应用无法访问由 Linux 上的服务帐户创建的文件。

  1. 是否可以在服务器上使用 REST API 添加/更改文件的所有权,以便客户端可以使用 Drive?SCOPE_FILE 读取文件?到目前为止,我在这条道路上的尝试都失败了。尝试插入新所有权失败,状态为尚未实现。更新权限以向应用程序提供所有权报告此文件的权限不足。尝试修补权限会给出类似的失败消息。但是,我是这个 API 的新手,可能做错了。

  2. 是否可以使用 Android DownloadManager 服务访问文件的内容?我对这条路径所做的最好的尝试是链接的多种变体,是一个看起来适合浏览器解析和显示的 HTML 文件:而不是 jpeg 文件的内容。同样,这对我来说是一个新领域,我可能做得不对。

  3. 根据我的研究,我似乎可以通过在 Android 客户端上使用 REST API 来完成我需要做的事情,但如果有其他途径,我真的不想招致这种开销。

在高层次上,文档(虽然很稀疏)暗示了我想做的事情。有没有人有这种数据流模式的经验?如果是这样,客户端读取服务帐户在服务器上创建的文件的适当方式是什么?

提前致谢!

最佳答案

在探索各种兔子洞几天后,我能够使用 Android DownloadManger 下载该文件。诀窍是在 HTTP 请求 URI 中编写正确的查询参数:

https://drive.google.com/uc?export=download&id=[resourceId]

此外,谷歌驱动器文件资源安全性需要“公开”或“任何有链接的人”才能正常工作。

关于android - 如何使用 Google Drive 将文件从 Linux 传输到 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275973/

相关文章:

http - 如果 POST 到 URL,我如何告诉客户端查看响应片段?

rest - 如何使用keycloak rest api自行注册用户

rest - Invoke-RestMethod - 忽略自签名证书

java - 如何在DownloadManager中设置下载目录?

Android ViewFlipper,如何正确使用?它又慢又滞

javascript - android 的phonegap 中永远不会调用Ajax 调用

android - BroadcastReceiver 会耗电吗?

android - 下载的文件在某些​​设备上没有扩展名

android - 如何解决DownloadManager无法打开文件和文件丢失的问题?

安卓布局设计