用于检查媒体库中mediaItem是图像还是图片的Sitecore快速方法

问题描述 投票:2回答:3

对于Sitecore“媒体库”中的项目:

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

以上项目是图片“ Tulips.jpg”。

如何从后面的代码检查上面的内容实际上是图片/图像?

sitecore sitecore7.2
3个回答
7
投票

一旦有了MediaItem对象,就可以这样做:

MediaItem mediaItem = ...

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

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

  • 图像/ bmp
  • image / gif
  • image / jpeg

2
投票

Dmytro Shevchenko建议的替代方法是使用Sitecore的API检查TemplateMediaItem,其中包含与进行字符串比较相对的图像。

[当图像上传到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;
}

1
投票

Sitecore在Sitecore Item类IsMediaItem]上有一个助手

Sitecore.Context.Item.Paths.IsMediaItem

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

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

© www.soinside.com 2019 - 2024. All rights reserved.