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 检查包含图像的 MediaItem
的 Template
,而不是进行字符串比较。
当图像上传到 MediaLibrary
时,它会存储一个 versioned
或 unversioned
模板以及 Image
或 jpeg
.
因此,要检查 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;
}
对于 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 检查包含图像的 MediaItem
的 Template
,而不是进行字符串比较。
当图像上传到 MediaLibrary
时,它会存储一个 versioned
或 unversioned
模板以及 Image
或 jpeg
.
因此,要检查 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;
}