umbraco:获取媒体节点媒体列表

时间:2017-11-30 10:45:00

标签: mysql image optimization umbraco umbraco4

我使用Umbraco 4x。

我需要一种方法来从媒体节点及其大小中获取媒体列表,以便了解优化(上传)图片的方式和位置。

由于某些上传的图片太大,因此显示它们需要时间,所以如果我正在搜索优化媒体加载的方法。

我找到了一个列出媒体的小sql脚本

select cmsPropertyData.id from cmsPropertyData
inner join cmsPropertyType on cmsPropertyData.propertytypeid = cmsPropertyType.id
inner join cmsDataType on cmsPropertyType.dataTypeId = cmsDataType.nodeId
where cmsDataType.controlId = '5032a6e6-69e3-491d-bb28-cd31cd11086c' 
    and cmsPropertyData.dataNvarchar is not null

enter image description here

但我需要一个来自给定节点的节点列表,路径大小文件。

2 个答案:

答案 0 :(得分:2)

我发现使用内置的Umbraco API获取有关媒体的信息会更容易一些。如果您在某处使用CSHTML,这应该可以工作:

@{ 
    // Make sure to replace MEDIA_ID with the ID of your folder.
    var folder = Umbraco.TypedMedia(MEDIA_ID);
    var mediaItems = folder.Descendants();

    <table>
        <thead>
            <tr>
                <td>ID</td>
                <td>URL</td>
                <td>Size</td>
            </tr>
        </thead>
        <tbody>
            @foreach (var mediaItem in mediaItems)
            {
                <tr>
                    <td>@(mediaItem.Id)</td>
                    <td>@(mediaItem.Url)</td>
                    <td>@(mediaItem.GetPropertyValue("umbracoBytes"))</td>
                </tr>
            }
        </tbody>
    </table>
}

这会获取您的文件夹,然后查找所有子项并将其显示在页面中。

或者,您可以将其重构为C#API或Surface控制器。

更新:这是在Umbraco 7上测试的,所以我不确定它是否适用于Umbraco 4.

答案 1 :(得分:0)

我建议只检查文件系统(假设您在本地存储媒体而不是云/ CDN),而不是尝试使用数据库查找图像大小。

您只需浏览找到的/media/即可查看哪些文件最大。

或者更好的是,下载WinDirStat之类的程序并让它来分析您的/media/文件夹:

enter image description here

使用WinDirStat,您可以看到文件的可视化表示。根据我的结果,我可以看到我的最大图像被称为banner1.jpg(媒体ID为1021)。它的大小约为700KB。

我希望这与您的需求相关。