zoukankan      html  css  js  c++  java
  • Upload Image to .NET Core 2.1 API

    原文地址:https://www.codeproject.com/Articles/1256591/Upload-Image-to-NET-Core-2-1-API

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ImageWriter.Helper
    {
        public class WriterHelper
        {
            public enum ImageFormat
            {
                bmp,
                jpeg,
                gif,
                tiff,
                png,
                unknown
            }
    
            public static ImageFormat GetImageFormat(byte[] bytes)
            {
                var bmp = Encoding.ASCII.GetBytes("BM");     // BMP
                var gif = Encoding.ASCII.GetBytes("GIF");    // GIF
                var png = new byte[] { 137, 80, 78, 71 };              // PNG
                var tiff = new byte[] { 73, 73, 42 };                  // TIFF
                var tiff2 = new byte[] { 77, 77, 42 };                 // TIFF
                var jpeg = new byte[] { 255, 216, 255, 224 };          // jpeg
                var jpeg2 = new byte[] { 255, 216, 255, 225 };         // jpeg canon
    
                if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
                    return ImageFormat.bmp;
    
                if (gif.SequenceEqual(bytes.Take(gif.Length)))
                    return ImageFormat.gif;
    
                if (png.SequenceEqual(bytes.Take(png.Length)))
                    return ImageFormat.png;
    
                if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
                    return ImageFormat.tiff;
    
                if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
                    return ImageFormat.tiff;
    
                if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
                    return ImageFormat.jpeg;
    
                if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
                    return ImageFormat.jpeg;
    
                return ImageFormat.unknown;
            }
        }
    }

     IImageWriter.cs 

    using Microsoft.AspNetCore.Http;
    using System.Threading.Tasks;
    
    namespace ImageWriter.Interface
    {
        public interface IImageWriter
        {
            Task<string> UploadImage(IFormFile file);
        }
    }
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using ImageWriter.Helper;
    using ImageWriter.Interface;
    using Microsoft.AspNetCore.Http;
    
    namespace ImageWriter.Classes
    {
        public class ImageWriter : IImageWriter
        {
            public async Task<string> UploadImage(IFormFile file)
            {
                if (CheckIfImageFile(file))
                {
                    return await WriteFile(file);
                }
    
                return "Invalid image file";
            }
    
            /// <summary>
            /// Method to check if file is image file
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            private bool CheckIfImageFile(IFormFile file)
            {
                byte[] fileBytes;
                using (var ms = new MemoryStream())
                {
                    file.CopyTo(ms);
                    fileBytes = ms.ToArray();
                }
    
                return WriterHelper.GetImageFormat(fileBytes) != WriterHelper.ImageFormat.unknown;
            }
    
            /// <summary>
            /// Method to write file onto the disk
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            public async Task<string> WriteFile(IFormFile file)
            {
                string fileName;
                try
                {
                    var extension = "." + file.FileName.Split('.')[file.FileName.Split('.').Length - 1];
                    fileName = Guid.NewGuid().ToString() + extension; //Create a new Name 
                                                                  //for the file due to security reasons.
                    var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot\images", fileName);
    
                    using (var bits = new FileStream(path, FileMode.Create))
                    {
                        await file.CopyToAsync(bits);
                    }
                }
                catch (Exception e)
                {
                    return e.Message;
                }
    
                return fileName;
            }
        }
    }
    using System.Threading.Tasks;
    using ImageWriter.Interface;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    
    namespace ImageUploader.Handler
    {
        public interface IImageHandler
        {
            Task<IActionResult> UploadImage(IFormFile file);
        }
    
        public class ImageHandler : IImageHandler
        {
            private readonly IImageWriter _imageWriter;
            public ImageHandler(IImageWriter imageWriter)
            {
                _imageWriter = imageWriter;
            }
    
            public async Task<IActionResult> UploadImage(IFormFile file)
            {
                var result = await _imageWriter.UploadImage(file);
                return new ObjectResult(result);
            }
        }
    }
    using System.Threading.Tasks;
    using ImageUploader.Handler;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    
    namespace ImageUploader.Controllers
    {
        [Route("api/image")]
        public class ImagesController : Controller
        {
            private readonly IImageHandler _imageHandler;
    
            public ImagesController(IImageHandler imageHandler)
            {
                _imageHandler = imageHandler;
            }
    
            /// <summary>
            /// Uplaods an image to the server.
            /// </summary>
            /// <param name="file"></param>
            /// <returns></returns>
            public async Task<IActionResult> UploadImage(IFormFile file)
            {
                return await _imageHandler.UploadImage(file);
            }
        }
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseHsts();
                }
    
                //Use this to set path of files outside the wwwroot folder
                //app.UseStaticFiles(new StaticFileOptions
                //{
                //    FileProvider = new PhysicalFileProvider(
                //        Path.Combine(Directory.GetCurrentDirectory(), "StaticFiles")),
                //    RequestPath = "/StaticFiles"
                //});
    
                app.UseStaticFiles(); //letting the application know that we need access to wwwroot folder.
    
                app.UseHttpsRedirection();
                app.UseMvc();
            }
    // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
                services.AddTransient<IImageHandler, ImageHandler>();
                services.AddTransient<ImageWriter.Interface.IImageWriter, 
                                      ImageWriter.Classes.ImageWriter>();
            }
  • 相关阅读:
    python3.5中的格式化输出
    关于IDE集成开发环境,Pycharm小技巧
    python3.5中的赋值运算符和逻辑运算符
    SecureCRT 使用技巧
    selenium-键盘和鼠标事件
    selenium-各种定位方法
    selenium-百度搜索框输入后,定位联想下拉框元素
    selenium
    mysql-client 与mysql-server的区别
    MySql8.0.15 window 初始化 修改密码
  • 原文地址:https://www.cnblogs.com/YrRoom/p/11108227.html
Copyright © 2011-2022 走看看