예제 #1
0
        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());
            }
        }