Umbraco 中的媒体文件大小报告
Media file size report in Umbraco
我在 CMS 的“媒体”部分中有很多图像。我想知道获取图像列表及其文件大小的最佳方法是什么?
在数据库中操作 xml 字符串会更好还是在 CMS 前端添加一列更好?
更新的答案:
更快更好的递归解决方案:
<ul id="imageList">
@foreach (var item in Umbraco.TypedMediaAtRoot()) {
@ShowMediaItems(item)
}
</ul>
@helper ShowMediaItems(IPublishedContent media) {
if (media.Descendants().Any(p => p.DocumentTypeAlias != "Folder") && media.DocumentTypeAlias == "Folder") {
<ul>
@foreach (var child in media.Children) {
@ShowMediaItems(child)
}
</ul>
} else if (media.DocumentTypeAlias == "Image") {
<li>Image url: @media.Url - Size: @(media.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
它会尽可能深入,而且速度要快得多。我为每个级别都放了一个新的 ul 列表,但你可以去掉它。
原始答案:
这很有效,在处理大量图像时会很慢,但如果您需要为自己获取一个列表(就像一次性的事情),那么它应该可以完成工作:
<ul>
@foreach (var item in Umbraco.TypedMediaAtRoot())
{
//Level 1
if (item.DocumentTypeAlias == "Folder")
{
//Level 2
foreach (var item2 in Umbraco.TypedMedia(item.Id).Children)
{
if (item2.DocumentTypeAlias == "Folder")
{
//Level 3
foreach (var item3 in Umbraco.TypedMedia(item2.Id).Children)
{
if (item3.DocumentTypeAlias == "Folder")
{
//Level 3
//etc..
}
else if (item3.DocumentTypeAlias == "Image")
{
<li>Image url: @item3.Url - Size: @(item3.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
}
else if (item2.DocumentTypeAlias == "Image")
{
<li>Image url: @item2.Url - Size: @(item2.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
}
else if (item.DocumentTypeAlias == "Image")
{
<li>Image url: @item.Url - Size: @(item.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
</ul>
根据媒体部分中的文件夹数量,您可以随意深入。
查看代码中的注释。 Level 1 是根媒体文件夹,Level 2 是根目录下的文件夹等等。
我刚刚在我的本地 Umbraco 实例上对其进行了测试并且它有效。
关于大小,它们以字节为单位,因此您可以使用 GetPropertyValue("umbracoBytes")
进行自己的计算
我在 CMS 的“媒体”部分中有很多图像。我想知道获取图像列表及其文件大小的最佳方法是什么?
在数据库中操作 xml 字符串会更好还是在 CMS 前端添加一列更好?
更新的答案:
更快更好的递归解决方案:
<ul id="imageList">
@foreach (var item in Umbraco.TypedMediaAtRoot()) {
@ShowMediaItems(item)
}
</ul>
@helper ShowMediaItems(IPublishedContent media) {
if (media.Descendants().Any(p => p.DocumentTypeAlias != "Folder") && media.DocumentTypeAlias == "Folder") {
<ul>
@foreach (var child in media.Children) {
@ShowMediaItems(child)
}
</ul>
} else if (media.DocumentTypeAlias == "Image") {
<li>Image url: @media.Url - Size: @(media.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
它会尽可能深入,而且速度要快得多。我为每个级别都放了一个新的 ul 列表,但你可以去掉它。
原始答案:
这很有效,在处理大量图像时会很慢,但如果您需要为自己获取一个列表(就像一次性的事情),那么它应该可以完成工作:
<ul>
@foreach (var item in Umbraco.TypedMediaAtRoot())
{
//Level 1
if (item.DocumentTypeAlias == "Folder")
{
//Level 2
foreach (var item2 in Umbraco.TypedMedia(item.Id).Children)
{
if (item2.DocumentTypeAlias == "Folder")
{
//Level 3
foreach (var item3 in Umbraco.TypedMedia(item2.Id).Children)
{
if (item3.DocumentTypeAlias == "Folder")
{
//Level 3
//etc..
}
else if (item3.DocumentTypeAlias == "Image")
{
<li>Image url: @item3.Url - Size: @(item3.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
}
else if (item2.DocumentTypeAlias == "Image")
{
<li>Image url: @item2.Url - Size: @(item2.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
}
else if (item.DocumentTypeAlias == "Image")
{
<li>Image url: @item.Url - Size: @(item.GetPropertyValue<int>("umbracoBytes"))</li>
}
}
</ul>
根据媒体部分中的文件夹数量,您可以随意深入。
查看代码中的注释。 Level 1 是根媒体文件夹,Level 2 是根目录下的文件夹等等。
我刚刚在我的本地 Umbraco 实例上对其进行了测试并且它有效。
关于大小,它们以字节为单位,因此您可以使用 GetPropertyValue("umbracoBytes")
进行自己的计算