我正在寻求帮助,以了解如何通过共享链接共享链接方法下载和移动通过共享目录访问的OneDrive文件。
我有两个用户:
除此之外:我目前正在使用Chrome应用程序"高级REST客户端"手动进行REST调用,并通过检查来自Microsoft在线" Graph Explorer"的网络流量获取Authenticated OAuth BEARER令牌。工具。在我们理解了这些调用之后,我们会将它集成到我们的Java应用程序中。
我已成功按照此处的说明操作: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/shares_get 查看文件夹内容。
更明确地说,用户' A'已进入OneDrive并右键单击文件夹“toshare”#39;并选择了shareLink。我已将shareLink转换为共享令牌,然后将以下API调用与Graph API一起用作用户' B':
GET https://graph.microsoft.com/v1.0/shares/<share-token>/root?$expand=children
这显示了目录中的所有文件,其中包括&#39; test.csv&#39;
现在,使用此信息,我该如何下载test.csv?假设用户&#39; B&#39;我不知道文件的名称,但可以通过.csv文件来识别它(我们可以在代码中执行此操作)。似乎没有太多关于如何通过共享下载文件的文档。
我最接近的是接受&#34; webUrl&#34;我的文件的子对象的属性,然后将其转换为共享令牌并调用
GET https://graph.microsoft.com/v1.0/shares/<child-share-token>/root
这将显示文件元数据。然后我尝试通过大致按照api文档下载https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/item_downloadcontent
来下载它GET https://graph.microsoft.com/v1.0/shares/<child-share-token>/root/content
这很有趣,因为如果我与用户“A&#39;但不适用于用户&#39; B&#39;而是在高级REST客户端中获得403。 (如果我在Graph Explorer中运行它,我得到&#34;编码的共享URI中的网站无效。&#34;相反,我在其他实验中发现,实际上意味着那里有授权问题。)
GET https://graph.microsoft.com/v1.0/shares/<share-token>/root:/test.csv:/content
也不起作用,它返回:&#34; 400 Bad Request&#34;带有消息:&#34;找不到该段的资源&#39; root:&#39;。&#34;。看起来路径样式文件导航对共享目录不起作用吗?
此时我很困惑。下载文件后,我还想把它移到一个子目录中,表示它已被读入。我也想让这个适用于OneDrive for Business,但这似乎是另一组挑战我将离开一天。
任何见解都会非常感谢, 杰里米
答案 0 :(得分:0)
最好将shares/{id}
段视为与drives/{id}
类似,此时所有有关儿童访问权限的文档都适用。根据您的情况,我使用路径语法:
https://graph.microsoft.com/v1.0/shares/<share-token>/root/children/test.csv
这显然需要知道文件名,但听起来你已经有了算法来做到这一点。
从理论上讲,您创建child-share-token
的方法可行,但现在要求用户B既提供身份验证又提供显式权限。由于您的share-token
是共享链接,因此用户B很可能因为拥有URL而获得权限,在这种情况下,生成新URL可能会删除允许此工作的特殊令牌。这就是为什么在可能的情况下始终使用原始share-token
的原因。
类似的规则将适用于移动文件。首先,我们假设共享链接提供了编辑&#34;否则这都不会起作用:)。其次,我们假设archive
文件夹已经存在(如果您不需要使用POST https://graph.microsoft.com/v1.0/shares/<share-token>/root/children
创建它,看起来像我们&# 39;记录here)。
要移动您想要PATCH到https://graph.microsoft.com/v1.0/shares/<share-token>/root/children/test.csv
的文件,并提供记录为here的新parentReference
。如果您拥有id
值,则最好使用path
值,但您也应该能够以/shares/<share-token>/root/children/archive
的形式向父级提供{{1}}。