1

Microsoft Graph C# SDK v1.13 を使用します。の を取得できIDriveItemThumbnailsCollectionPageますDriveItem。そのページで、最初のThumbnailSet. これThumbnailSetには、小、中、大の Thumbnail オブジェクトがあります。

これらの各 Thumbnail オブジェクトには、サムネイルの有効な URL があるように見えます。ただし、.Content(ストリーム)プロパティはどれも有効ではありません...それらはすべてNULLです。

元:

IDriveItemThumbnailsCollectionPage page = await client
    .Me
    .Drive
    .Items[this.Id]
    .Thumbnails
    .Request()
    .GetAsync();

if ((page != null) && (page.CurrentPage != null) && (page.CurrentPage.Count > 0)) {
    ThumbnailSet thumbs = page.CurrentPage.FirstOrDefault();
    if (thumbs != null) {
        if ((minHeight != null) && (minHeight.HasValue) && (minWidth != null) && (minWidth.HasValue)) {
            if ((minHeight > 48) || (minWidth > 48)) {
                Thumbnail thumb = thumbs.Medium;
                thumbStream = thumb?.Content;
            }
        }

        if (thumbStream == null)
            thumbStream = thumbs?.Small?.Content;
    }
}

これらのサムネイルのコンテンツ ストリームの 1 つを SDK で取得するにはどうすればよいですか?

VS デバッガーを使用して返された変数を確認すると、"thumbs" にサイズと URL が入力されますが、コンテンツを取得しようとすると常に NULL になります。

4

1 に答える 1

1

Thumbnail.Urlプロパティはサムネイル コンテンツを取得するための URLを格納するために使用されるため、おそらくサムネイル コンテンツをダウンロードする最も簡単なオプションは次のようになります。

var page = await graphClient.Me.Drive.Items[itemId].Thumbnails.Request().GetAsync();
var thumbnailSet = page.FirstOrDefault();
var thumbnail = thumbnailSet?.Medium;
using (var client = new System.Net.WebClient())
{
    var content = client.DownloadData(thumbnail.Url);  //download it as a byte array

    System.IO.File.WriteAllBytes(targetFileName, content); //save into file
}

オプション 2

別のオプションは、次のエンドポイントを利用することです ( docs から):

GET /me/drive/items/{item-id}/thumbnails/{thumb-id}/{size}/content

の例を次に示しmsgraph-sdk-dotnetます。

//1.get thumbnail metadata (similar to previous example)
var requestUrl = $"{graphClient.BaseUrl}/me/drive/items/{itemId}/thumbnails/{thumbnailId}/{thumbnailSize}";
var message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);
var content = await response.Content.ReadAsStringAsync();
var thumbnail = JsonConvert.DeserializeObject<Thumbnail>(content);

//2.get thumbnail content
requestUrl = $"{graphClient.BaseUrl}/me/drive/items/{itemId}/thumbnails/{thumbnailId}/{thumbnailSize}/content";
message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
response = await graphClient.HttpProvider.SendAsync(message);
var bytesContent = await response.Content.ReadAsByteArrayAsync();
于 2019-01-22T14:20:24.250 に答える