ASP.NET MVC Core Azure Blob Image Resizer - PullRequest
0 голосов
/ 11 июня 2018

У меня есть основное приложение ASP.NET , которое загружает изображения в Azure .Я пытаюсь изменить размер изображения с помощью Magick.NET перед загрузкой указанного изображения в контейнер BLOB-объектов Azure.До сих пор мне удалось сохранить изображение в папку на локальном жестком диске.Это правильный способ написать это?

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Product products)
{
    var files = products.UploudThumbnail;

    List<string> image = new List<string>();
    List<string> names = new List<string>();

    if (files != null)
    {
        foreach (var file in files)
        {
            if (ModelState.IsValid)
            {
                if (file.ContentType == "image/jpeg" || file.ContentType == "image/jpg")
                {
                    if (file.Length < 1 * 1000 * 1000) 
                    {
                        var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);

                        var fileName = parsedContentDisposition.FileName.Trim('"');
                        names.Add(fileName);

                        fileName = Guid.NewGuid().ToString() + "-" + fileName;

                        CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(fileName);
                        cloudBlockBlob.Properties.ContentType = file.ContentType;
                        await cloudBlockBlob.UploadFromStreamAsync(file.OpenReadStream());

                        image.Add(cloudBlockBlob.Uri.AbsoluteUri);


                        const int size = 20;
                        const int quality = 75;

                        using (var image = new MagickImage(file.OpenReadStream()))
                        {
                            image.Resize(size, size);
                            image.Strip();
                            image.Quality = quality;
                            //how to save it into azure?
                            image.Write(fileName);
                        }

                    }
                    else
                    {
                        ModelState.AddModelError("UploudThumbnail", "Max size not accepted");
                    }
                }
                else
                {
                    ModelState.AddModelError("UploudThumbnail", "jpeg & jpg are accepted");
                }

            }
        }
    }

    _context.Add(products);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
}

1 Ответ

0 голосов
/ 11 июня 2018

Просто запишите изображение в поток памяти и загрузите его, используя метод UploadFromStreamAsync.

Пример (псевдо):

using (var memStream = new MemoryStream())
{
    image.Write(memStream);

    memStream.Seek(0, SeekOrigin.Begin);
    await cloudBlockBlob.UploadFromStreamAsync(memStream);
}
...