ImageResizer和ASP.NET核心Web应用程序(.NET Framework)

时间:2016-06-08 15:31:36

标签: imageresizer

在哪里可以找到基于ASP.NET核心Web应用程序(.NET Framework)的ImageResizer(ImageResizing.net)独立网站的完整示例?

"frameworks": { "net461": { } },

2 个答案:

答案 0 :(得分:1)

这是一个可以模拟ImageResizer + AzureReader2的工作PoC。

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace ImageResizerSvc
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddSingleton(x =>
            {
                var config = new ImageResizer.Configuration.Config();
                // install plugins, e.g.
                // new PrettyGifs().Install(config);
                return config;
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc(routes =>
            {
                routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");

                routes.MapRoute("imageresizer", "{*path}",
                    defaults: new { controller = "Images", action = "Resizer" });
            });
        }
    }
}

ImagesController.cs

using ImageResizer;
using Microsoft.AspNetCore.Mvc;
using Microsoft.WindowsAzure.Storage;
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;

namespace ImageResizerSvc.Controllers
{
    public class ImagesController : Controller
    {
        private readonly ImageResizer.Configuration.Config _imageResizerConfig;

        public ImagesController(ImageResizer.Configuration.Config imageResizerConfig)
        {
            _imageResizerConfig = imageResizerConfig ?? throw new ArgumentNullException(nameof(imageResizerConfig));
        }

        public async Task<IActionResult> Resizer()
        {
            // Init storage account
            var connectionString = "UseDevelopmentStorage=true";
            CloudStorageAccount.TryParse(connectionString, out CloudStorageAccount cloudStorageAccount);
            var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

            // Get blob ref
            var storagePath = cloudBlobClient.BaseUri.ToString().TrimEnd('/', '\\');
            var blobPath = Request.Path.Value.Trim('/', '\\');
            var blobUri = new Uri($"{storagePath}/{blobPath}");

            using (var sourceStream = new MemoryStream(4096))
            {
                try
                {
                    var blob = await cloudBlobClient.GetBlobReferenceFromServerAsync(blobUri);
                    await blob.DownloadToStreamAsync(sourceStream);
                    sourceStream.Seek(0, SeekOrigin.Begin);
                }
                catch (StorageException e)
                {
                    // Pass to client
                    if (Enum.IsDefined(typeof(HttpStatusCode), e.RequestInformation.HttpStatusCode))
                    {
                        return StatusCode(e.RequestInformation.HttpStatusCode, e.RequestInformation.HttpStatusMessage);
                    }

                    throw;
                }

                var destinationStream = new MemoryStream(4096);

                var instructions = new Instructions(Request.QueryString.Value);
                var imageJob = _imageResizerConfig.Build(new ImageJob(sourceStream, destinationStream, instructions));
                destinationStream.Seek(0, SeekOrigin.Begin);

                return File(destinationStream, imageJob.ResultMimeType);
            }
        }
    }
}

然后您可以转到http://localhost/{container}/{blobPath.ext}?{imageResizer_queryString}

来使用它

答案 1 :(得分:0)

今天你不能 - ImageResizer&amp; peer使用Windows API for jpeg / png / gif编解码器,将它们绑定到.NET Full。

我们有一个ongoing Kickstarter for libimageflow来开发一个跨平台的成像库,它可以成为System.Drawing的优秀替代品 - 并且可以在所有平台上运行。

目前,libimageflow是一个工作原型;跨平台和多语言。我们还计划创建一个可以在任何地方使用的独立服务器。