使用云端硬盘 API 在多个用户的 Google 云端硬盘中共享 Google 文档(v2、Ruby 客户端、Rails、iOS)
Sharing a Google Doc across multiple users' Google Drive using Drive API (v2, Ruby Client, Rails, iOS)
大家好 Google 大师和 Drive API 忍者!
我有一个 Rails 应用,其流程如下:
一个用户提交了一个表单
在用户的云端硬盘中创建了一个模板化的 Google 文档
该文档与另一个用户共享
该文档已添加到其他用户的驱动器
在最后一步之前一切都很好,这让这张不起眼的海报充满了悲伤。在我看来,我的应用程序应该能够调用 drive.parents.insert
,其中我传递了(由用户)创建时存储的 fileId
和其他用户所需文件夹的 folder_id
。可悲的是,调用 drive.parents.insert
(甚至 drive.files.get
)return 状态为 404 - 找不到文件。这是一个无赖,因为其他用户可以在 https://docs.google.com/document/d/#{fileId}
访问该文档,并且可以使用驱动器 GUI 提供的添加到我的驱动器按钮从“与我共享”选项卡手动将文件添加到他们自己的驱动器。
那么,各位读者,我的理解差距在哪里?我必须先调用 drive.files.insert
或其他一些 Drive API 方法吗?如果是
1) 我应该使用属于用户或其他用户的新身份验证令牌授权我的请求吗?
2) 如果我应该使用 drive.files.insert
,为现有文档声明插入的 media
部分的正确方法是什么? (media = Google::APIClient::UploadIO...???
)
我非常乐意根据要求提供额外的详细信息,但我怀疑这个问题是概念性的...
最好的,
-B
编辑:
创建文档的用户可以获取文件;创建文件夹的其他用户可以获取文件夹;我如何才能达到目的,以便用户可以将他的文件(与其他用户共享)添加到其他用户的文件夹中,或者其他用户可以将用户的文件(他共享的文件)添加到他的文件夹中。再次感谢您的关注。
用适合我的解决方案回答我自己的问题:
据我所知,范围 googleapis.com/auth/drive.file
不足以将文档从 'Shared With Me' 文件夹移动到 'My Drive'.
也就是说,我更改了我的 oAuth 初始值设定项:
config.omniauth :google_oauth2, '...', '...',
{
scope: [
'email',
'profile',
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/drive.file'
],
access_type: 'offline',
prompt: 'consent'
}
至:
config.omniauth :google_oauth2, '...', '...',
{
scope: [
'email',
'profile',
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.file'
],
access_type: 'offline',
prompt: 'consent'
}
我在任何地方都找不到表明这是必需的文档 - 恰恰相反,事实上,正如 Google 文档所建议的那样 drive.file
。任何可以将未来的读者引导至任何提及此内容的帮助文档的人都会获得业力奖励积分。 -B
大家好 Google 大师和 Drive API 忍者!
我有一个 Rails 应用,其流程如下:
一个用户提交了一个表单
在用户的云端硬盘中创建了一个模板化的 Google 文档
该文档与另一个用户共享
该文档已添加到其他用户的驱动器
在最后一步之前一切都很好,这让这张不起眼的海报充满了悲伤。在我看来,我的应用程序应该能够调用 drive.parents.insert
,其中我传递了(由用户)创建时存储的 fileId
和其他用户所需文件夹的 folder_id
。可悲的是,调用 drive.parents.insert
(甚至 drive.files.get
)return 状态为 404 - 找不到文件。这是一个无赖,因为其他用户可以在 https://docs.google.com/document/d/#{fileId}
访问该文档,并且可以使用驱动器 GUI 提供的添加到我的驱动器按钮从“与我共享”选项卡手动将文件添加到他们自己的驱动器。
那么,各位读者,我的理解差距在哪里?我必须先调用 drive.files.insert
或其他一些 Drive API 方法吗?如果是
1) 我应该使用属于用户或其他用户的新身份验证令牌授权我的请求吗?
2) 如果我应该使用 drive.files.insert
,为现有文档声明插入的 media
部分的正确方法是什么? (media = Google::APIClient::UploadIO...???
)
我非常乐意根据要求提供额外的详细信息,但我怀疑这个问题是概念性的...
最好的,
-B
编辑:
创建文档的用户可以获取文件;创建文件夹的其他用户可以获取文件夹;我如何才能达到目的,以便用户可以将他的文件(与其他用户共享)添加到其他用户的文件夹中,或者其他用户可以将用户的文件(他共享的文件)添加到他的文件夹中。再次感谢您的关注。
用适合我的解决方案回答我自己的问题:
据我所知,范围 googleapis.com/auth/drive.file
不足以将文档从 'Shared With Me' 文件夹移动到 'My Drive'.
也就是说,我更改了我的 oAuth 初始值设定项:
config.omniauth :google_oauth2, '...', '...',
{
scope: [
'email',
'profile',
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/drive.file'
],
access_type: 'offline',
prompt: 'consent'
}
至:
config.omniauth :google_oauth2, '...', '...',
{
scope: [
'email',
'profile',
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.file'
],
access_type: 'offline',
prompt: 'consent'
}
我在任何地方都找不到表明这是必需的文档 - 恰恰相反,事实上,正如 Google 文档所建议的那样 drive.file
。任何可以将未来的读者引导至任何提及此内容的帮助文档的人都会获得业力奖励积分。 -B