Конвертировать IFormFile в изображение в Asp Core - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно изменить размер загружаемого файла, если файл является изображением.

Я пишу расширение для изменения размера:

 public static Image ResizeImage(this Image image, int width, int height)
    {
        var res = new Bitmap(width, height);
        using (var graphic = Graphics.FromImage(res))
        {
            graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode = SmoothingMode.HighQuality;
            graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphic.CompositingQuality = CompositingQuality.HighQuality;
            graphic.DrawImage(image, 0, 0, width, height);
        }
        return res;
    }

и это Upload Action :

 [HttpPost("UploadNewsPic"), DisableRequestSizeLimit]
    public IActionResult UploadNewsPic(IFormFile file)
    {
        if (file.IsImage())
        {

        }
        try
        {
            if (file.Length > 0)
            {
                string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                string fullPath = Path.Combine(_applicationRoot.UploadNewPath(), file.Name);
                using (var stream = new FileStream(fullPath, FileMode.Create))
                {
                    file.CopyTo(stream);
                }
            }
            return Ok();
        }
        catch (Exception e)
        {
            return BadRequest();
        }
    }

теперь моя проблема здесь => мое расширение просто работает с типом Image файла, но тип этого файла IFormFile. как я могу преобразовать IFormFile в Image тип?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Вы должны использовать метод Image.FromStream(), чтобы прочитать поток как изображение:

public async Task<IActionResult> FileUpload(IFormFile file)
        {
            if (file == null || file.Length == 0)
            {
                return BadRequest();
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.CopyToAsync(memoryStream);
                using (var img = Image.FromStream(memoryStream))
                {
                  // TODO: ResizeImage(img, 100, 100);
                }
            }
        }
0 голосов
/ 16 мая 2019

Вам нужно открыть файл с помощью OpenReadStream и конвертировать в формат изображения. И передайте то же самое вашему методу расширения.

FileDetails fileDetails;
                using (var reader = new StreamReader(file.OpenReadStream()))
                {
                   var fileContent = reader.ReadToEnd();
                   var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);
                   fileDetails = new FileDetails
                      {
                          Filename = parsedContentDisposition.FileName,
                          Content = fileContent,
                          ContentType=file.ContentType
                       };
                 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...