我们有以下控制器来获取文件:
[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="" />
答案 0 :(得分:1)
通过任何类型的应用程序框架(无论是MVC,WebAPI,Rails,WebForms还是HttpHandlers)提供大型二进制文件通常都是一个坏主意。
ImageResizer Best Practices guide更详细地解释。
要获得良好的性能,您应该将其实现为URL重写(或IVirtualImageProvider)。
处理ImageResizer&#39; Config.Current.Pipeline.Rewrite
事件,并自行解析路径。根据您解析的ID修改Path,并递增视图计数器。这应该需要5-8行代码。