Загрузите файл с помощью Microsoft Graph c # SDK по полному URL файла - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть список полных URL-адресов, и я хочу загрузить файлы из папок SharePoint и Business OneDrive.URL-адреса: https://tenant -my.sharepoint.com / personal / bob_smith_tenant_onmicrosoft_com / Документы / Microsoft Файлы чата команд / file.csv

https://tenant.sharepoint.com/sites/Development/Shared%20Documents/General/file2.pdf

Я не вижу способа использовать Graph SDK для прямой загрузки файлов.Я успешно загрузил файл SharePoint с помощью CSOM, но предпочел бы использовать Graph, чтобы он мог обрабатывать оба типа файлов, если это возможно.Кто-нибудь знает возможно ли это?Заранее спасибо

1 Ответ

0 голосов
/ 23 февраля 2019

Когда дело доходит до адресации ресурса по Url в OneDrive API, shares конечная точка приходит на помощь.В этом случае процесс загрузки файла по полному URL-адресу может состоять из следующих шагов:

  • Первым шагом будет преобразование URL-адреса в токен общего доступа (см. Раздел ниже).), поэтому мы используем shares конечную точку
  • после того, как генерируется токен общего доступа, запрос API OneDrive на скачивание файла может быть сконструирован следующим образом: /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-адрес в токен общего доступа(адаптировано с здесь )

static string UrlToSharingToken(string inputUrl)
{
   var base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(inputUrl));
   return "u!" + base64Value.TrimEnd('=').Replace('/', '_').Replace('+', '-');
}
...