Как сохранить измененное изображение в моем Azure хранилище BLOB-объектов в моем ASP. NET основном приложении? - PullRequest
0 голосов
/ 06 апреля 2020

Я использую библиотеку ImageSharp для изменения масштаба моих изображений перед их загрузкой в ​​Azure, приложение зависает без ошибок, когда оно достигает действия UploadBlob, и я думаю, что это поток, вызывающий его. Когда изображение загружено, информация собирается из потока изображений, я создаю пустой MemoryStream, изменяю размер изображения, используя ImageSharp, заполняю MemoryStream моим недавно масштабированным изображением и пытаюсь загрузить это MemoryStream в Azure и я не думаю, что ему это нравится, потому что именно там он зависает.

Является ли MemoryStream правильной вещью для использования в этом случае, или это что-то еще?

CarController .cs

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Car car)
{
    // Define the cancellation token.
    CancellationTokenSource source = new CancellationTokenSource();
    CancellationToken token = source.Token;

    if (ModelState.IsValid)
    {
        //Access the car record
        _carService.InsertCar(car);

        //Get the newly created ID
        int id = car.Id;

        //Give it a name with some virtual directories within the container         
        string fileName = "car/" + id + "/car-image.jpg";
        string strContainerName = "uploads";

        //I create a memory stream ready for the rescaled image, not sure this is right.
        Stream outStream = new MemoryStream();

        //Access my storage account
        BlobServiceClient blobServiceClient = new BlobServiceClient(accessKey);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(strContainerName);

        //Open the image read stream
        var carImage = car.ImageFile.OpenReadStream();

        //Rescale the image, save as jpeg.
        using (Image image = Image.Load(carImage))
        {
            int width = 250;
            int height = 0;
            image.Mutate(x => x.Resize(width, height));                    
            image.SaveAsJpeg(outStream);
        }

        var blobs = containerClient.UploadBlob(fileName, outStream);
        return RedirectToAction(nameof(Index));
    }            
    return View(car);
}

1 Ответ

1 голос
/ 08 апреля 2020

Это не имеет ничего общего с библиотекой ImageSharp.

Вам необходимо сбросить вашу позицию outStream после сохранения. BlobContainerClient пытается прочитать с конца потока.

...