当我使用“知道此链接的任何人都可以查看此项目”选项在 UI 中创建共享链接时,我得到一个类似于 https://onedrive.live.com/redir?resid=XXX!YYYY&authkey=!ZZZZZ&ithint=<contentType>
的 URL。 .我想不通的是如何从代码中使用这个 URL 来下载文件的内容。点击链接会为页面提供 HTML 以显示文件。
我如何构造一个下载文件的调用?此外,是否有一种方法可以构建调用以获取有关文件的某些(XML/JSON)元数据,甚至可能是预览或其他内容?我希望能够在不提示用户输入凭据的情况下完成所有这些操作,并且所有 API 文档都是关于如何进行已验证 调用的。我想调用匿名电话以获取公开共享的文件。
最佳答案
阅读 https://dev.onedrive.com - 它记录了您如何查询我们的服务以获取项目的元数据,以及可用于直接下载内容的 URL。
更新更多细节
抱歉,您的特定场景所需的文档仍在处理中(以及相关的 SDK 更改),因此我将向您简要介绍如何执行此操作。
/drives
有一个兄弟名为 /shares
的路径它接受编码格式的共享 URL(例如您上面的那个),并允许您获取它所代表的项目的元数据。如果共享 URL 具有有效的 authkey
,这不需要验证.
id 的编码方案是u!<UrlSafeBase64EncodedUrl>
, 其中<UrlSafeBase64EncodedUrl>
遵循概述的准则 here (修剪掉末尾的 =
个字符)。
下面是一个片段,可以让您了解整个过程:
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
),您可以开始浏览
关于onedrive - 从 OneDrive 下载公开共享的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015295/