代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

为amazon s3(或其他cdn)扩展/替换html.image

  •  0
  • Simon_Weaver  · 技术社区  · 16 年前

    只想确认没有方法在不编写替换函数的情况下扩展或替换html.image功能。

    我想编写一个使用amazon的s3服务托管图像的函数。

    我想到的最好的方法是帮助方法 Html.SmartImage 它会检查一个配置属性,看看我是否想去亚马逊。它甚至可以检查远程托管的文件数据库,如果这些文件在该列表中,则只会将它们“转出”。

    我会在完成后发布我所拥有的——但对任何“开箱即用”的想法都很好奇。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Nick Berardi    16 年前

    不,你说得对,你需要创建自己的扩展方法来处理这样的自定义场景。

        2
  •  0
  •   Simon_Weaver    16 年前

    这就是我所做的——至少现在是这样:

    搜索并替换:

     html.image("~
    

    对于

     Html.CDNImage("~
    

    然后在静态类中创建一个助手 ImageExtensions :

    public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl)
            {
                return CDNImage(htmlHelper, imageRelativeUrl, null, null);
            }
    
            public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl, object htmlAttributes)
            {
                return CDNImage(htmlHelper, imageRelativeUrl, null, htmlAttributes);
    
            }
    
            public static string CDNImage(this HtmlHelper htmlHelper, string imageRelativeUrl, string alt, object htmlAttributes)
            {
                string url = Regex.Replace(imageRelativeUrl, "~/content/", "http://s3.amazon.com/", RegexOptions.Compiled | RegexOptions.IgnoreCase);
    
                return htmlHelper.Image(url, alt, htmlAttributes);
    
            }
    

    显然我在用 s3.amazon.com 作为一个占位符-你必须填写你的cdn的url,不管它是什么。

    如果需要,可以使用某种配置属性来确定是否实际进行了替换。