2015-08-09 68 views
7

在MVC 6中调整上传图像的最佳方式是什么?我想存储图像的多个变体(如小,大等),以便能够选择稍后显示的图像。在MVC 6中调整上传图像的大小6

这是我的行为代码。

[HttpPost] 
    public async Task<IActionResult> UploadPhoto() 
    { 
     if (Request.Form.Files.Count != 1) 
      return new HttpStatusCodeResult((int)HttpStatusCode.BadRequest); 

     IFormFile file = Request.Form.Files[0]; 

     // calculate hash 
     var sha = System.Security.Cryptography.SHA256.Create(); 
     byte[] hash = sha.ComputeHash(file.OpenReadStream()); 

     // calculate name and patch where to store the file 
     string extention = ExtentionFromContentType(file.ContentType); 
     if (String.IsNullOrEmpty(extention)) 
      return HttpBadRequest("File type not supported"); 

     string name = WebEncoders.Base64UrlEncode(hash) + extention; 
     string path = "uploads/photo/" + name; 

     // save the file 
     await file.SaveAsAsync(this.HostingEnvironment.MapPath(path)); 
    } 

回答

4

我会建议使用图像处理器库。

http://imageprocessor.org/imageprocessor/

然后,你可以做线沿线的东西:

using (var imageFactory = new ImageFactory()) 
using (var fileStream = new FileStream(path)) 
{ 
    file.Value.Seek(0, SeekOrigin.Begin); 

    imageFactory.FixGamma = false; 
    imageFactory.Load(file.Value) 
       .Resize(new ResizeLayer(new Size(264, 176))) 
       .Format(new JpegFormat 
       { 
        Quality = 100 
       }) 
       .Quality(100) 
       .Save(fileStream); 
} 

哪里file.Value是你的文件被上传(流)(我不知道它是什么,在MVC ,这是我在南希项目中使用的代码)

+0

谢谢!正是我需要的! –

+0

@Phill伟大的链接,谢谢,我发现了唯一的vNext图像。但是“新大小”是System.Drawing部分吗? – Alex

+0

@voo当前的Nuget仍然需要System.Drawing,但API正在改变V2来放弃这个约束。 https://github.com/JimBobSquarePants/ImageProcessor#api-changes – Phill