Upload Image to .NET Core 2.1 API
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>();
以上是关于Upload Image to .NET Core 2.1 API的主要内容,如果未能解决你的问题,请参考以下文章
仅当 upload_to 被称为 django 时才调整图像大小
imageField 中的 upload_to 属性无法将图像保存在磁盘上