首页 > 解决方案 > CSOM 调用 GetImagePreviewUrl 返回 Object 但值为空

问题描述

我正在尝试使用 GetImagePreviewUrl 的 CSOM 调用,但我相信我可能没有正确使用它。

虽然我可以用 C# 编写代码,但我不是 SharePoint 用户或管理员,所以这可能是我的问题的一部分。我对我正在查询的 SharePoint 中的网站拥有完全访问权限,我可以毫无问题地调用 ClientContext 并返回 Microsoft.SharePoint.Client.File。我正在使用相同的代码来获取系统中其他位置的列表和文件信息。从这个文件中可以看出,我应该能够调用 GetImagePreviewUrl 并返回预览图像。该调用将返回一个 Microsoft.SharePoint.Client.ClientRequest 但值始终为空(下图)。为简洁起见,以下是我的代码行。

var ctx = new ClientContext("http://mysharepointResource/andSite");
ctx.ExecutingWebRequest += appendBearerToken;     // just adding headers here
ctx.RequestTimeout = Timeout.Infinite;

Microsoft.Sharepoint.Client.File file = ctx.Web.GetFileByUrl(value);
ctx.Load(file);
await ctx.ExecuteQueryAsync();

var previewUri = file.GetImagePreviewUri(300,300, "docLibGrid");

我在想这里可能有两件事可能是错误的,首先我可能为第三个参数使用了错误的值。我的示例代码使用“docLibGrid”字符串,因为我从这里看到的示例中得到了它。 但也许这应该像网页标题内容类型值一样。它应该是像预览图像一样的“图像/jpeg”值,还是应该代表原始文件的内容类型?我尝试了几种不同的标头类型,它们返回相同的 NULL 值。

我的第二个想法可能是我在 SharePoint 网站本身上设置了错误,因此我在返回的 ClientResult 的 Value 字段中收到了一个 NULL。我是否需要要求管理员打开某些东西,或者我需要验证预览图像是否存在?我去过 SharePoint 网站并按照几种方法查看预览图像,所以我认为不是这样。

在此处输入图像描述

我感谢任何帮助或指示,谢谢。

标签: c#sharepointcsom

解决方案


列表项EncodedAbsThumbnailUrl属性存储图像缩略图 url,以下示例显示如何获取它:

using (var ctx = new ClientContext(webUri))             
{
    var list = ctx.Web.Lists.GetByTitle(pictureLibraryTitle);
    var item = list.GetItemById(itemId);
    ctx.Load(item, i => i["EncodedAbsThumbnailUrl"]);
    ctx.ExecuteQuery();

    Console.WriteLine(item["EncodedAbsThumbnailUrl"]);
}

推荐阅读