环境:
我有一个由 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 上的服务帐户创建的文件。
是否可以在服务器上使用 REST API 添加/更改文件的所有权,以便客户端可以使用 Drive?SCOPE_FILE 读取文件?到目前为止,我在这条道路上的尝试都失败了。尝试插入新所有权失败,状态为尚未实现。更新权限以向应用程序提供所有权报告此文件的权限不足。尝试修补权限会给出类似的失败消息。但是,我是这个 API 的新手,可能做错了。
是否可以使用 Android DownloadManager 服务访问文件的内容?我对这条路径所做的最好的尝试是链接的多种变体,是一个看起来适合浏览器解析和显示的 HTML 文件:而不是 jpeg 文件的内容。同样,这对我来说是一个新领域,我可能做得不对。
根据我的研究,我似乎可以通过在 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/