0

我使用 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

在此处输入图像描述

但我宁愿需要来自给定节点的节点列表、路径和文件大小

4

2 回答 2

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。

于 2017-12-01T13:41:04.120 回答
0

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

您可以浏览您/media/找到的文件以检查哪些文件是最大的。

或者更好的是,下载一个像WinDirStat这样的程序并让它来分析你的/media/文件夹:

在此处输入图像描述

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

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

于 2017-12-01T13:29:06.493 回答