【问题标题】:the CSOM call GetImagePreviewUrl returns Object but empty ValueCSOM 调用 GetImagePreviewUrl 返回 Object 但值为空
【发布时间】:2020-09-14 06:43:26
【问题描述】:

我正在尝试使用 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”字符串,因为我从一个示例中得到了它,我看到了here. 但也许这应该像一个网页标题内容类型值。它应该是像预览图像一样的“图像/jpeg”值,还是应该代表原始文件的内容类型?我尝试了几种不同的标头类型,它们返回相同的 NULL 值。

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

感谢任何帮助或指点,谢谢。

【问题讨论】:

    标签: c# sharepoint csom


    【解决方案1】:

    列表项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"]);
    }
    

    【讨论】:

    • 这确实为我的问题提供了一个半解决方案,即希望使用 CSOM 来获得这些值。但是,如果有人可以让我了解如何使用“GetImagePreviewUri”方法并且它是参数,我将不胜感激。
    • 为什么不使用 getpreview.ashx。在这种情况下,您只需要使用完整的文件路径调用 ashx。因此,在这种情况下,您只需要使用不记名令牌作为 GET 调用它,并带有完整的图像 url 或新闻页面图像,例如yourdomain.sharepoint.com/sites/SharePoint/_layouts/15/…
    • 用户未通过身份验证,这一切都通过后端 API 端点进行身份验证和检索包括缩略图在内的文件,因此从我所见,getPreview.ASHX 处理程序并不是一个很好的设计,但是对于直接调用来说很棒。
    • 您发送到预览页面的请求包含一个身份验证cookie。此 cookie 可以通过以下代码生成: 创建一个身份验证 cookie,我们可以将其与请求一起发送,以便 sharepoint 知道我们是谁。 var authCookie = credentials.GetAuthenticationCookie(new Uri(imageUrl)); client.Headers.Add(HttpRequestHeader.Cookie, authCookie); // 下载图片数据到字节数组 image = client.DownloadData(imageUrl);
    • 这可能与您的情况重复 stackoverflow.com/questions/33387858/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多