当我在用户界面中创建一个共享链接时,“有此链接的任何人都可以查看此项目”选项,我会看到一个类似https://onedrive.live.com/redir?resid=XXX!YYYY&authkey=!ZZZZZ&ithint=<contentType>
的网址。我无法弄清楚如何使用代码中的URL来下载文件的内容。点击链接会为页面显示HTML以显示文件。
如何构建下载文件的调用?此外,有没有办法构建一个调用来获取有关该文件的一些(XML / JSON)元数据,甚至可能是预览或其他东西?我希望能够在不提示用户提供凭据的情况下完成所有操作,并且所有API文档都是关于如何进行经过身份验证的调用。我想匿名调用以获取公开共享的文件。
答案 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
)