从 OneDrive 下载公开共享的文件

Downloading a publicly-shared file from OneDrive

当我使用 "Anyone with this link can view this item" 选项在 UI 中创建共享 link 时,我得到一个看起来像 https://onedrive.live.com/redir?resid=XXX!YYYY&authkey=!ZZZZZ&ithint=<contentType> 的 URL。我想不通的是如何从代码中使用这个 URL 来下载文件的内容。点击 link 会得到 HTML 页面以显示文件。

如何构建下载文件的调用?此外,有没有一种方法可以构建调用以获取有关文件的一些 (XML/JSON) 元数据,甚至可能是预览或其他内容?我希望能够在不提示用户输入凭据的情况下完成这一切,所有 API 文档都是关于如何进行 authenticated 调用的。我想匿名调用以获取公开共享的文件。

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

更新更多细节

抱歉,您的特定场景所需的文档仍在处理中(以及相关的 SDK 更改),因此我将向您简要介绍如何执行此操作。

/drives 路径有一个名为 /shares 的同级路径,它接受编码格式的共享 URL(例如您上面的那个)并允许您获取元数据对于它代表的项目。如果共享 URL 具有有效的 authkey.

,这 不需要 身份验证

id 的编码方案是 u!<UrlSafeBase64EncodedUrl>,其中 <UrlSafeBase64EncodedUrl> 遵循概述的准则 here(trim 从末尾开始的 = 个字符) .

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

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,或者如果 URL 代表文件夹(例如 /children/childfile.txt),您可以开始浏览