首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CDN MVC:从控制器返回ASP.NET镜像

CDN MVC:从控制器返回ASP.NET镜像
EN

Stack Overflow用户
提问于 2012-02-07 01:26:26
回答 6查看 4.8K关注 0票数 4

我知道如何从MVC控制器返回图像,但我想知道从MVC控制器返回CDN中的图像是否会违背对图像使用CDN的目的。使用以下代码是否会导致托管web应用程序的web服务器从CDN下载,然后使其可供用户从web服务器下载?镜像是否下载了两次,一次是从CDN下载到webserver,然后是webserver下载到用户?如果是这样,这比直接在the服务器上托管图像更糟糕吗?或者镜像只下载一次,直接从CDN下载给最终用户?

如何从MVC控制器返回图像,同时利用CDN?

代码语言:javascript
复制
    public ActionResult Thumb(int id)
    {
        //process 
        var file = Server.MapPath(" path to image in the CDN ");
        //do your stuff
        return File(file, "image/jpg", Path.GetFileName(file));
    }
EN

回答 6

Stack Overflow用户

发布于 2012-02-07 01:30:15

在您的控制器操作中,您需要执行一个HTTP请求以从远程服务器获取图像:

代码语言:javascript
复制
public ActionResult Thumb(int id)
{
    using (var client = new WebClient())
    {
        byte[] image = client.DownloadData("http://cdn.foo.com/myimage.jpg");
        return File(image, "image/jpg");
    }
}

然后:

代码语言:javascript
复制
<img src="@Url.Action("Thumb")" alt="" />

显然,现在镜像被下载了两次。一次从CDN进入控制器,一次来自客户端。这完全违背了控制器操作的目的,您可以直接从CDN引用镜像:

代码语言:javascript
复制
<img src="http://cdn.foo.com/myimage.jpg" alt="" />

这显然假设客户端可以访问CDN。

当然,如果您的控制器操作不仅仅是从CDN获取图像并将其流式传输到客户端,例如从CDN获取图像并调整其大小,那么您绝对应该采用第一种方法。

票数 9
EN

Stack Overflow用户

发布于 2012-02-07 01:30:50

Server.MapPath用于映射镜像的物理路径,它不会对CDN镜像做任何事情,因为它不存在于本地的物理路径。不,你不想返回一个文件。

您的超文本标记语言只需在<img>标记中引用CDN图像。即

代码语言:javascript
复制
<img src="http://mycdn.com/image" />
票数 2
EN

Stack Overflow用户

发布于 2016-05-19 22:43:21

假设您需要先做一些计算来找出资源,比如根据某个ID进行查找,以解析CDN url。如果你必须下载这个文件,它实际上会变成一种易失性资源,你需要决定如何处理它,使用断路器,可能没有缓存,你需要缓冲它,这样它就不会使用太多的内存。

在这种情况下,您最好解析url并根据用例使用重定向301/302。

代码语言:javascript
复制
public ActionResult Thumb(int id)
{
    //resolve url
    var file = " path to image in the CDN ";
    //redirect permanent
    return RedirectPermanent(file);
    //OR redirect 
    return Redirect(file);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9164333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档