使用ImageResizer和FileResult,ASP.NET MVC?

时间:2014-03-23 04:03:13

标签: c# asp.net-mvc asp.net-mvc-5 imageresizer

我们有以下控制器来获取文件:

[SessionState(SessionStateBehavior.Disabled)]
public class FileController : BaseController
{
    [HttpGet]
    public FileResult Index(long id)
    {
        if (id <= 0) return null;
        Attachment attachment = Service.GetAttachmentById(id);
        if (attachment == null) return null;
        new Task(() => Service.IncreaseAttachmentViewCount(id)).Start();
        string filename = attachment.Name;
        //"application/octet-stream";
        string mimeType = System.Web.MimeMapping.GetMimeMapping(filename);
        return File(attachment.Path, mimeType);
    }
}

没关系,效果很好,但不适用于ImageResizer API 例如:
下图以自然尺寸(1920 * 1200)显示,maxwidth或maxheight根本不起作用。但如果我使用绝对文件路径,它就可以工作。

<img src="File/Index/1231?maxwidth=300&maxheight=300" alt="" />

1 个答案:

答案 0 :(得分:1)

通过任何类型的应用程序框架(无论是MVC,WebAPI,Rails,WebForms还是HttpHandlers)提供大型二进制文件通常都是一个坏主意。

ImageResizer Best Practices guide更详细地解释。

要获得良好的性能,您应该将其实现为URL重写(或IVirtualImageProvider)。

处理ImageResizer&#39; Config.Current.Pipeline.Rewrite事件,并自行解析路径。根据您解析的ID修改Path,并递增视图计数器。这应该需要5-8行代码。