private static IHttpHandler CreateHttpHandler(IUrlResolver urlResolver) { if (string.IsNullOrEmpty(urlResolver.FileName) || !File.Exists(urlResolver.FileName)) { return(null); } MagickFormatInfo formatInfo = MagickNET.GetFormatInformation(urlResolver.Format); if (formatInfo == null || string.IsNullOrEmpty(formatInfo.MimeType)) { return(null); } if (urlResolver.Script != null) { return(new MagickScriptHandler(urlResolver, formatInfo)); } if (ImageOptimizerHandler.CanOptimize(formatInfo)) { return(new ImageOptimizerHandler(urlResolver, formatInfo)); } if (GzipHandler.CanCompress(formatInfo)) { return(new GzipHandler(urlResolver, formatInfo)); } return(null); }
private void Test_ProcessRequest(IImageData imageData) { using (TemporaryDirectory directory = new TemporaryDirectory()) { string tempDir = directory.FullName; string config = $@"<magick.net.web cacheDirectory=""{tempDir}"" tempDirectory=""{tempDir}"" useOpenCL=""true""/>"; MagickWebSettings settings = TestSectionLoader.Load(config); HttpRequest request = new HttpRequest("foo", "https://bar", string.Empty); string outputFile = Path.Combine(tempDir, "output.jpg"); using (StreamWriter writer = new StreamWriter(outputFile, false, Encoding)) { HttpResponse response = new HttpResponse(writer); HttpContext context = new HttpContext(request, response); ImageOptimizerHandler handler = new ImageOptimizerHandler(settings, imageData); handler.ProcessRequest(context); } byte[] imageBytes = imageData.GetBytes(); Assert.IsTrue(new FileInfo(outputFile).Length < imageBytes.Length); Assert.AreEqual(2, tempDir.GetFiles().Count()); File.Delete(outputFile); FileInfo cacheFile = tempDir.GetFiles().First(); File.WriteAllText(cacheFile.FullName, string.Empty); using (StreamWriter writer = new StreamWriter(outputFile)) { HttpResponse response = new HttpResponse(writer); HttpContext context = new HttpContext(request, response); ImageOptimizerHandler handler = new ImageOptimizerHandler(settings, imageData); handler.ProcessRequest(context); } Assert.AreEqual(0, File.ReadAllBytes(outputFile).Count()); Assert.AreEqual(2, tempDir.GetFiles().Count()); cacheFile.LastWriteTimeUtc = new DateTime(1979, 11, 19); using (StreamWriter writer = new StreamWriter(outputFile)) { HttpResponse response = new HttpResponse(writer); HttpContext context = new HttpContext(request, response); ImageOptimizerHandler handler = new ImageOptimizerHandler(settings, imageData); handler.ProcessRequest(context); } Assert.AreNotEqual(0, File.ReadAllBytes(outputFile).Count()); Assert.AreEqual(2, tempDir.GetFiles().Count()); } }