如何使用 Google 驱动器将文件从 Linux 传输到 Android
How to transfer file from Linux to Android using Google Drive
环境:
我有一个由 Android 客户端和 Linux 服务器组成的系统。文件(jpeg 图像)通过 Google 驱动器 OK 从 Android 客户端传输到 Linux 服务器。
- 客户端使用 Drive API 将文件上传到 Google Drive
上的 ServerUploads 文件夹
- 客户端通过 GCM(Google 云消息)通知服务器文件
- 服务器上的 ServiceAccount 通过 REST 读取文件 API
我的传输效果很好。
稍后服务器需要根据搜索条件、位置、视图区域等将文件 (jpeg) 发送给其他客户端。所以我尝试反向传输 jpeg 文件给客户端。
- Linux 服务器上的服务帐户将文件上传到 Google Drive
上的 ClientDownload 文件夹
- 服务器通过 GCM 通知客户端该文件
- 客户端尝试通过驱动器API下载文件但由于保护失败
应用程序和ServiceAccount都与开发者控制台中的应用程序相关联。
与应用程序关联的电子邮件和ServiceAccount 是不同的域。 (这不是 Google 工作应用程序。)
问题:
由于较新的 Android Drive API with Google Play Services 仅支持 Drive.SCOPE_FILE 该应用程序无法访问由 Linux 上的服务帐户创建的文件。
是否可以在服务器上使用 REST API 获得文件的 add/change 所有权,以便客户端可以使用 Drive 读取文件?SCOPE_FILE?到目前为止,我在这条道路上的尝试都失败了。尝试插入新所有权失败,状态为尚未实施。更新权限以向应用程序提供所有权报告此文件的权限不足。尝试修补权限会给出类似的失败消息。但是,我是这个 API 的新手,可能做错了。
是否可以使用 Android DownloadManager 服务访问文件的内容?我对这条路径所做的最好的尝试是链接的多种变体,是一个 HTML 文件,它看起来适合浏览器解析和显示:而不是 jpeg 文件的内容。同样,这对我来说是一个新领域,我可能做得不对。
根据我的研究,我似乎可以通过在 Android 客户端上使用 REST API 来完成我需要做的事情,但我真的不想这样做如果有另一条路径,则会产生开销。
在高层次上,文档(虽然很稀疏)暗示了我想做的事情。有没有人有这种数据流模式的经验?如果是这样,客户端读取服务帐户在服务器上创建的文件的适当方式是什么?
提前致谢!
经过几天探索各种兔子洞后,我能够使用 Android DownloadManger 下载该文件。诀窍是在 HTTP 请求 URI 中编写正确的查询参数:
https://drive.google.com/uc?export=download&id=[resourceId]
此外,google 驱动器文件资源安全性需要 'public' 或 'anyone with link' 才能正常工作。
环境:
我有一个由 Android 客户端和 Linux 服务器组成的系统。文件(jpeg 图像)通过 Google 驱动器 OK 从 Android 客户端传输到 Linux 服务器。
- 客户端使用 Drive API 将文件上传到 Google Drive 上的 ServerUploads 文件夹
- 客户端通过 GCM(Google 云消息)通知服务器文件
- 服务器上的 ServiceAccount 通过 REST 读取文件 API
我的传输效果很好。
稍后服务器需要根据搜索条件、位置、视图区域等将文件 (jpeg) 发送给其他客户端。所以我尝试反向传输 jpeg 文件给客户端。
- Linux 服务器上的服务帐户将文件上传到 Google Drive 上的 ClientDownload 文件夹
- 服务器通过 GCM 通知客户端该文件
- 客户端尝试通过驱动器API下载文件但由于保护失败
应用程序和ServiceAccount都与开发者控制台中的应用程序相关联。
与应用程序关联的电子邮件和ServiceAccount 是不同的域。 (这不是 Google 工作应用程序。)
问题: 由于较新的 Android Drive API with Google Play Services 仅支持 Drive.SCOPE_FILE 该应用程序无法访问由 Linux 上的服务帐户创建的文件。
是否可以在服务器上使用 REST API 获得文件的 add/change 所有权,以便客户端可以使用 Drive 读取文件?SCOPE_FILE?到目前为止,我在这条道路上的尝试都失败了。尝试插入新所有权失败,状态为尚未实施。更新权限以向应用程序提供所有权报告此文件的权限不足。尝试修补权限会给出类似的失败消息。但是,我是这个 API 的新手,可能做错了。
是否可以使用 Android DownloadManager 服务访问文件的内容?我对这条路径所做的最好的尝试是链接的多种变体,是一个 HTML 文件,它看起来适合浏览器解析和显示:而不是 jpeg 文件的内容。同样,这对我来说是一个新领域,我可能做得不对。
根据我的研究,我似乎可以通过在 Android 客户端上使用 REST API 来完成我需要做的事情,但我真的不想这样做如果有另一条路径,则会产生开销。
在高层次上,文档(虽然很稀疏)暗示了我想做的事情。有没有人有这种数据流模式的经验?如果是这样,客户端读取服务帐户在服务器上创建的文件的适当方式是什么?
提前致谢!
经过几天探索各种兔子洞后,我能够使用 Android DownloadManger 下载该文件。诀窍是在 HTTP 请求 URI 中编写正确的查询参数:
https://drive.google.com/uc?export=download&id=[resourceId]
此外,google 驱动器文件资源安全性需要 'public' 或 'anyone with link' 才能正常工作。