从OneDrive下载公共共享文件

时间:2016-03-15 15:18:18

标签: onedrive

当我在用户界面中创建一个共享链接时,“有此链接的任何人都可以查看此项目”选项,我会看到一个类似https://onedrive.live.com/redir?resid=XXX!YYYY&authkey=!ZZZZZ&ithint=<contentType>的网址。我无法弄清楚如何使用代码中的URL来下载文件的内容。点击链接会为页面显示HTML以显示文件。

如何构建下载文件的调用?此外,有没有办法构建一个调用来获取有关该文件的一些(XML / JSON)元数据,甚至可能是预览或其他东西?我希望能够在不提示用户提供凭据的情况下完成所有操作,并且所有API文档都是关于如何进行经过身份验证的调用。我想匿名调用以获取公开共享的文件。

1 个答案:

答案 0 :(得分:6)

阅读https://dev.onedrive.com - 它记录了如何查询我们的服务以获取项目的元数据,以及可用于直接下载内容的URL。

更新详情

很抱歉,您的特定方案所需的文档仍在处理中(以及相关的SDK更改),因此我将向您概述如何执行此操作。

有一个名为/drives的{​​{1}}路径的兄弟,它以编码格式接受共享网址(例如您上面的网址),并允许您获取该项目的元数据它代表了。如果共享网址具有有效的/shares,则需要身份验证。

ID的编码方案为authkey,其中u!<UrlSafeBase64EncodedUrl>遵循概述here的指导原则(从最后修剪<UrlSafeBase64EncodedUrl>个字符。)

这是一个片段,可以让您了解整个过程:

=

如果您想获取文件内容,可以在此处附加string originalUrl = "https://onedrive.live.com/redir?resid=XXX!YYYY&authkey=!foo"; byte[] urlAsUtf8Bytes = Encoding.UTF8.GetBytes(originalUrl); string utf8BytesAsBase64String = Convert.ToBase64String(urlAsUtf8Bytes); string encodedUrl = "u!" + utf8BytesAsBase64String.TrimEnd('=').Replace('/', '_').Replace('+', '-'); string metadataUrl = "https://api.onedrive.com/v1.0/shares/" + encodedUrl + "/root"; ,或者如果网址代表文件夹(例如/content

,您可以开始导航