从 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
),您可以开始浏览
当我使用 "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
),您可以开始浏览