onedrive - 从 OneDrive 下载公开共享的文件

标签 onedrive

当我使用“知道此链接的任何人都可以查看此项目”选项在 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/

相关文章:

rest - 使用 REST api 列出 Office 365 OneDrive (Sharepoint) for Business 和 Education 中 'Shared with Me' 文件夹的文件夹内容?

javascript - 读取 SkyDrive 文件的内容

android - 使用 Android 和 Rest API 了解 OneDrive 中的身份验证流程

c# - Onedrive wcf 网络服务

javascript - 使用Javascript上传 "file"

java - Android 中的文件/数据库在线同步

java - 如何使用 OneDrive SDK for Android 发送搜索请求

javascript - 如何从 OneDrive API 获取共享和下载链接

azure - 在应用模式下通过 Microsoft Graph 访问 AD 用户 OneDrive for Businesses

javascript - 当我的重定向 URL 包含唯一用户 ID 时,如何使用 OneDrive Web 选取器?