Sitecore快速查看媒体库中的mediaItem是Image还是图片

Sitecore fast way to check the mediaItem in the Media Library is an Image or a picture

对于 Sitecore 'Media Library' 中的项目:

MediaItem mediaItem = Sitecore.Context.Database.GetItem("{E47591D0-48D2-4543-80E4-3836B02AA1A8}");  

以上项目为图片"Tulips.jpg"。

我如何从后面的代码中检查上面的项目实际上是 Picture/Image?

获得 MediaItem 对象后,您可以执行以下操作:

MediaItem mediaItem = ...

bool isPicture = mediaItem.MimeType.StartsWith("image/");

之所以有效,是因为 MIME types 的图像是这样形成的:image/...。例如:

  • image/bmp
  • image/gif
  • image/jpeg

Sitecore 在 Sitecore 项目上有一个助手 class IsMediaItem

Sitecore.Context.Item.Paths.IsMediaItem

此代码检查该项目是否具有包含“sitecore/Media 库”的路径

您可以在将项目转换为媒体项目之前对其进行检查。

Dmytro Shevchenko 建议的替代方法是使用 Sitecore 的 API 检查包含图像的 MediaItemTemplate,而不是进行字符串比较。

当图像上传到 MediaLibrary 时,它会存储一个 versionedunversioned 模板以及 Imagejpeg.

因此,要检查 mediaItem 是否为图像,您可以执行以下操作;

public ID ImageUnversioned = new ID("{F1828A2C-7E5D-4BBD-98CA-320474871548}");
public ID JpegUnversioned = new ID("{DAF085E8-602E-43A6-8299-038FF171349F}");
public ID ImageVersioned = new ID("{C97BA923-8009-4858-BDD5-D8BE5FCCECF7}");
public ID JpegVersioned = new ID("{EB3FB96C-D56B-4AC9-97F8-F07B24BB9BF7}");

public bool IsImage(Item mediaItem)
{
    return mediaItem.TemplateID.Equals(ImageUnversioned)
           || mediaItem.TemplateID.Equals(JpegUnversioned)
           || mediaItem.TemplateID.Equals(ImageVersioned)
           || mediaItem.TemplateID.Equals(JpegVersioned);
}

然后简单地传入 mediaItem 如下;

bool isImageOrPicture = IsImage(mediaItem);

更新

Dmytro Shevchenko 非常重视递归检查项目的所有基本模板,因为 Jpeg 模板源自 Image 模板。如此实施:

using Sitecore;
using Sitecore.Data.Items;

...

public static bool IsImage(Item item)
{
    if (item.TemplateID == TemplateIDs.VersionedImage 
        || item.TemplateID == TemplateIDs.UnversionedImage)
    {
        return true;
    }

    foreach (TemplateItem baseTemplate in item.Template.BaseTemplates)
    {
        if (IsImage(baseTemplate))
        {
            return true;
        }
    }

    return false;
}