你能在MVC中创建一个带自定义扩展的自定义httphandler吗? 我想要一个具有以下路径的图像处理程序(如果可能), domain.com/picture/{id of the picture} 是否有可能从MVC内部或我必须在IIS 7中做到这
我想要一个具有以下路径的图像处理程序(如果可能),
domain.com/picture/{id of the picture}
是否有可能从MVC内部或我必须在IIS 7中做到这一点?
无需添加httphandler.你应该通过控制器在asp.net mvc中执行此操作例:
public class PictureController : Controller { public FileResult GetImage(int pictureID) { byte[] fileContents = null; //Get the file here. return File(fileContents, "image/jpeg"); } }
在global.asax中你可以定义
routes.MapRoute("Picture-GetImage", "picture/{pictureID}", new { controller = "Picture", action = "GetImage" }
您也可以使用System.Web.Helpers.WebImage帮助程序,或手动执行,例如:
public static byte[] ProcessCropResizeImage(string imageurl, Size outputSize) { if (File.Exists(imageurl)) { MemoryStream result = new MemoryStream(); ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(m => m.MimeType == "image/jpeg"); if (codec == null) throw new ArgumentException(string.Format("Unsupported mimeType specified for encoding ({0})", "image/jpeg"), "encodingMimeType"); EncoderParameters encoderParams = new EncoderParameters(1); encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L); using (FileStream fs = File.OpenRead(imageurl)) { using (Image image = Image.FromStream(fs)) { using (Bitmap b = new Bitmap(outputSize.Width, outputSize.Height)) { using (Graphics g = Graphics.FromImage((Image)b)) { g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(image, 0, 0, outputSize.Width, outputSize.Height); g.DrawImage(image, outputSize.Width, outputSize.Height); } b.Save(result, codec, encoderParams); } } } return result.GetBuffer(); } return null; }