通过文件的完整 URL 使用 Microsoft Graph c# SDK 下载文件
Download a file with the Microsoft Graph c# SDK by the file's full URL
我有一个完全限定的 URL 列表,我希望从 SharePoint 和商业 OneDrive 文件夹中下载文件。网址如下:
https://tenant-my.sharepoint.com/personal/bob_smith_tenant_onmicrosoft_com/Documents/Microsoft 团队聊天 Files/file.csv
https://tenant.sharepoint.com/sites/Development/Shared%20Documents/General/file2.pdf
我没有看到使用 Graph SDK 直接下载文件的方法。我已使用 CSOM 成功下载 SharePoint 文件,但我更愿意使用 Graph,以便它可以尽可能处理这两种文件类型。有谁知道这是否可能?提前致谢
当谈到 在 OneDrive API 中通过 Url 寻址资源时,shares
endpoint 就派上用场了。在这种情况下,完整 url 下载文件的流程可能包括以下步骤:
- 第一步是 将 URL 转换为共享令牌(请参阅
下面的部分),为此我们使用
shares
endpoint
- 生成共享令牌后,OneDrive API 请求
下载一个文件可以这样构造:
/shares/{shareIdOrEncodedSharingUrl}/driveitem/content
例子
const string fileFullUrl = "https://contoso-my.sharepoint.com/personal/jdoe_contoso_onmicrosoft_com/documents/sample.docx";
var sharedItemId = UrlToSharingToken(fileFullUrl);
var requestUrl = $"{graphClient.BaseUrl}/shares/{sharedItemId}/driveitem/content";
var message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);
var bytesContent = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("sample.docx", bytesContent); //save into local file
如何将URL转换为分享令牌
以下代码片段演示了如何将 URL 转换为共享令牌(改编自 here)
static string UrlToSharingToken(string inputUrl)
{
var base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(inputUrl));
return "u!" + base64Value.TrimEnd('=').Replace('/', '_').Replace('+', '-');
}
我有一个完全限定的 URL 列表,我希望从 SharePoint 和商业 OneDrive 文件夹中下载文件。网址如下: https://tenant-my.sharepoint.com/personal/bob_smith_tenant_onmicrosoft_com/Documents/Microsoft 团队聊天 Files/file.csv
https://tenant.sharepoint.com/sites/Development/Shared%20Documents/General/file2.pdf
我没有看到使用 Graph SDK 直接下载文件的方法。我已使用 CSOM 成功下载 SharePoint 文件,但我更愿意使用 Graph,以便它可以尽可能处理这两种文件类型。有谁知道这是否可能?提前致谢
当谈到 在 OneDrive API 中通过 Url 寻址资源时,shares
endpoint 就派上用场了。在这种情况下,完整 url 下载文件的流程可能包括以下步骤:
- 第一步是 将 URL 转换为共享令牌(请参阅
下面的部分),为此我们使用
shares
endpoint - 生成共享令牌后,OneDrive API 请求
下载一个文件可以这样构造:
/shares/{shareIdOrEncodedSharingUrl}/driveitem/content
例子
const string fileFullUrl = "https://contoso-my.sharepoint.com/personal/jdoe_contoso_onmicrosoft_com/documents/sample.docx";
var sharedItemId = UrlToSharingToken(fileFullUrl);
var requestUrl = $"{graphClient.BaseUrl}/shares/{sharedItemId}/driveitem/content";
var message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);
var bytesContent = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("sample.docx", bytesContent); //save into local file
如何将URL转换为分享令牌
以下代码片段演示了如何将 URL 转换为共享令牌(改编自 here)
static string UrlToSharingToken(string inputUrl)
{
var base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(inputUrl));
return "u!" + base64Value.TrimEnd('=').Replace('/', '_').Replace('+', '-');
}