使用Google Drive SDK共享文件

时间:2013-06-07 06:15:34

标签: javascript google-drive-api google-api-js-client

我一直在关注Google的文档,以便在云端硬盘上分享文件:Share Files

如果我从Google云端硬盘界面将文件上传到Google云端硬盘,然后尝试从我的网络应用程序共享此文件,我的javascript控制台中出现以下错误:

chrome中的

Refused to display 'https://drive.google.com/share?id=0B6UmN_AivG7SLWVYakF2Rk1CdDg&foreignServi…=postMessage&appId=958414147877&embedOrigin=http%3A%2F%2Fsandbox.velop.org' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'. 

在firefox中:

[14:04:41.157] Load denied by X-Frame-Options: https://drive.google.com/share?id=0B6UmN_AivG7SLWVYakF2Rk1CdDg&foreignService=explorer&shareService=explorer&shareProtocolVersion=2&command=init&subapp=10&popupWindowsEnabled=true&shareUiType=default&rand=1370585078609&theme=2&client=postMessage&appId=958414147877&embedOrigin=http%3A%2F%2Fsandbox.velop.org does not permit cross-origin framing.

现在奇怪的是,如果我从我的webapp创建文件并通过api上传到Drive,我可以毫无问题地共享该文件。

更奇怪的是,只需从云端硬盘中打开文件一次就足够了(我已在我的云端硬盘中安装了网络应用程序,以便我可以使用我的网络应用程序打开文件)以便能够共享它,即使以后我不再使用Drive打开文件了。

知道可能导致这种行为的原因是什么?

在我的Drive SDK控制台中,我将开放网址设置为:http://sandbox.velop.org/my-google-drive/detail

当我使用我的网络应用程序在云端硬盘中打开文件时,云端硬盘因此会将我重定向到:http://sandbox.velop.org/my-google-drive/detail?state=%7B%22ids%22:%5B%220B6UmN_AivG7SLWVYakF2Rk1CdDg%22%5D,%22action%22:%22open%22,%22userId%22:%22105908447865504163566%22%7D(能够共享)

当我在我的网络应用程序中打开文件时,URL就像:http://sandbox.velop.org/my-google-drive/0B6UmN_AivG7SLWVYakF2Rk1CdDg/detail(只有在之前从驱动器打开过才能共享)

修改

我意识到这是Google Drive API的标准行为,如here所述:

  

当用户批准这些范围时,会为该用户安装该应用程序,并可访问用户创建或使用该应用程序打开的文件。

有没有办法让应用程序打开/写入任何文件?

我认为在注册我的应用时使用https://www.googleapis.com/auth/drive范围可以让我这样做,但似乎并非如此......

2 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。

我的应用正在请求完整的驱动器范围(因此应用应该可以访问所有文件)。 但共享仅在用户之前已从驱动器中打开文件时才有效。 似乎有一些神奇的“在列表中”已经从驱动器打开的文件。

在我获得之前访问尚未从驱动器打开的文件时...

拒绝在相框中显示htps://drive.google.com/share?id = 0534534543iTEhYamxfUnc2MnM& foreignServi ... ent = postMessage& appId = 46459361793& embedOrigin = http%3A%2F%2Fwww.editey.com'它将'X-Frame-Options'设置为'SAMEORIGIN'。

...由于分享按钮不在一个框架中,这显然会产生误导。

在新的浏览器选项卡中打开给定网址,提示真正的根本原因: 申请'3453459361793'无权访问“0B0o5345345DAc_SiTEhYamxfUnc2MnM”文件。

我的应用应该可以访问该文档,但看起来“共享对话框”就像一个单独的应用程序,只允许访问从驱动器预先打开过的文件。

答案 1 :(得分:0)

出于安全原因,驱动器不允许您使用该对话框,除非您位于“打开网址”指定的URL。

您当前的网址http://sandbox.velop.org/my-google-drive/0B6UmN_AivG7SLWVYakF2Rk1CdDg/detail!= http://sandbox.velop.org/my-google-drive/detail

因此,您可能希望更改网址结构。也许像http://sandbox.velop.org/my-google-drive/detail?open=B6UmN_AivG7SLWVYakF2Rk1CdDg

这是真正的痛苦,尤其是在不同领域发展时。