我知道如何从MVC控制器返回图像,但我想知道从MVC控制器返回CDN中的图像是否会违背对图像使用CDN的目的。使用以下代码是否会导致托管web应用程序的web服务器从CDN下载,然后使其可供用户从web服务器下载?镜像是否下载了两次,一次是从CDN下载到webserver,然后是webserver下载到用户?如果是这样,这比直接在the服务器上托管图像更糟糕吗?或者镜像只下载一次,直接从CDN下载给最终用户?
如何从MVC控制器返回图像,同时利用CDN?
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));
}发布于 2012-02-07 01:30:15
在您的控制器操作中,您需要执行一个HTTP请求以从远程服务器获取图像:
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");
}
}然后:
<img src="@Url.Action("Thumb")" alt="" />显然,现在镜像被下载了两次。一次从CDN进入控制器,一次来自客户端。这完全违背了控制器操作的目的,您可以直接从CDN引用镜像:
<img src="http://cdn.foo.com/myimage.jpg" alt="" />这显然假设客户端可以访问CDN。
当然,如果您的控制器操作不仅仅是从CDN获取图像并将其流式传输到客户端,例如从CDN获取图像并调整其大小,那么您绝对应该采用第一种方法。
发布于 2012-02-07 01:30:50
Server.MapPath用于映射镜像的物理路径,它不会对CDN镜像做任何事情,因为它不存在于本地的物理路径。不,你不想返回一个文件。
您的超文本标记语言只需在<img>标记中引用CDN图像。即
<img src="http://mycdn.com/image" />发布于 2016-05-19 22:43:21
假设您需要先做一些计算来找出资源,比如根据某个ID进行查找,以解析CDN url。如果你必须下载这个文件,它实际上会变成一种易失性资源,你需要决定如何处理它,使用断路器,可能没有缓存,你需要缓冲它,这样它就不会使用太多的内存。
在这种情况下,您最好解析url并根据用例使用重定向301/302。
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);
}https://stackoverflow.com/questions/9164333
复制相似问题