首页 文章

从共享链接目录下载和移动OneDrive文件

提问于
浏览
1

我正在寻找帮助,以了解如何通过共享链接共享链接方法下载和移动通过共享目录访问的OneDrive文件 .

我有两个用户:

  • user 'A'谁是Microsoft Consumer并拥有常规OneDrive帐户,并将在文件夹'toshare'中托管csv文件'test.csv'

  • 和用户'B'谁也是普通的Microsoft消费者,应该使用图形API下载test.csv,然后将文件移动到子目录/ toshare / archive

旁白:我目前正在使用chrome app "advanced REST client"手动进行REST调用,并通过检查来自Microsoft的网络流量来获取Authenticated OAuth BEARER令牌's online 391239 tool. After we understand the calls, we' ll将其集成到我们的Java应用程序中 .

我已成功按照此处的说明操作:https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/shares_get查看文件夹内容 .

更明确地说,用户'A'进入OneDrive并右键单击文件夹'toshare'并选择了shareLink . 我已将shareLink转换为共享令牌,然后将以下API调用与Graph API一起用作用户'B':

GET https://graph.microsoft.com/v1.0/shares/<share-token>/root?$expand=children

这显示了目录中的所有文件,其中包括'test.csv'

Now, using this information, how can I download test.csv? 假设用户'B'不知道文件的名称,但可以通过.csv文件来识别它(我们可以在代码中执行此操作) . 似乎没有太多关于如何通过共享下载文件的文档 .

我得到的最接近的是为我的文件获取子对象的“webUrl”属性,然后将其转换为共享令牌并调用

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'进行调用,但不适用于在高级REST客户端中获得403的用户'B',则此方法有效 . (如果我在Graph Explorer中运行它,我会得到“编码的共享URI中的网站无效 . ”而是我在其他实验中发现的,实际上意味着存在授权问题 . )

GET https://graph.microsoft.com/v1.0/shares/<share-token>/root:/test.csv:/content

也不起作用,它返回:“400 Bad Request”,带有消息:“找不到段'root的资源:' . ”似乎路径样式文件导航不适用于共享目录?

此时我很困惑 . 下载文件后,我也想把它移到一个子目录中,表示它已经被读入 . 我也想让它适用于OneDrive for Business,但这似乎是另一套挑战我我会离开一天 .

杰里米,任何见解都会非常感谢

1 回答

  • 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而获得权限,在这种情况下,生成新的可能会删除允许此工作的特殊令牌 . 's why it'最好始终尽可能使用原始 share-token .

    类似的规则将适用于移动文件 . 首先,我们假设 archive 文件夹已经存在(如果它没有't you'需要使用POST来创建它, https://graph.microsoft.com/v1.0/shares/<share-token>/root/children 看起来像我们记录的那样here) .

    要将要剪贴的文件移动到 https://graph.microsoft.com/v1.0/shares/<share-token>/root/children/test.csv ,并提供一个新的 parentReference ,如文档here所示 . 如果你拥有它们,最好使用 id 值,但你也应该能够以 /shares/<share-token>/root/children/archive 的形式向父级提供 path .

相关问题