从OneDrive下载公共共享文件

Jon*_*upp 2 onedrive

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

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

Bra*_*rad 6

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

更新更多细节

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

/drives路径上有一个兄弟,/shares它以编码格式接受共享URL(例如您上面的那个),并允许您获取它所代表的项目的元数据.这并没有要求身份验证提供共享URL具有有效的authkey.

此ID的编码方案u!<UrlSafeBase64EncodedUrl>,其中<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";
Run Code Online (Sandbox Code Playgroud)

/content如果您想获取文件的内容,可以从那里附加,或者如果URL表示文件夹,您可以开始导航(例如/children/childfile.txt)