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

Пользователи могут загружать изображения при создании записи, когда вы редактируете эту запись и пытаетесь загрузить новые изображения, возникает ошибка «Этот BLOB-объект уже существует». Есть ли способ, которым я могу включить перезапись больших двоичных объектов с тем же именем в моем приложении?

Вот мой код, который обрабатывает процесс обновления.

Важно отметить, что я создаю три итерации изображения для приложения, поэтому я включил массив, содержащий эту информацию.

CarController.cs

private readonly int[] sizeArray = new int[] { 700, 350, 150 };

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Car car)
{
    if (ModelState.IsValid)
    {
        //Create the Car
                _carService.InsertCar(car);

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

                //Define the container name for Azure Storage
                string strContainerName = "uploads";                               

                //Blob Client
                BlobServiceClient blobServiceClient = new BlobServiceClient(accessKey);
                BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(strContainerName);

                //Iterate over the array of image sizes
                foreach (var imageSize in sizeArray)
                {
                    try
                    {
                        //Pass image to image processor and save to the blob location
                        string fileName = "car/" + id + "/car-image-" + imageSize + ".jpg";
                        Stream returnStream = ProcessImage(imageSize, car);
                        containerClient.UploadBlob(fileName, returnStream);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }                   
                return RedirectToAction(nameof(Index));
            }            
            return View(car);
        }

Ответы [ 2 ]

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

Я думаю, что вы используете клиентскую библиотеку v12 .

Тогда нет способа перезаписи BLOB-объектов на уровне контейнер , вы должны использовать метод Upload(Stream content, bool overwrite = false) BlobClient. Пример кода, как показано ниже:

            BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(mycontainer);
            BlobClient blobClient = containerClient.GetBlobClient("blob_name");

            blobClient.Upload(your_stream, overwrite: true);
0 голосов
/ 07 апреля 2020

Как указано в документации :

Для частичных обновлений блочных блобов и других расширенных функций см. BlockBlobClient. Чтобы создать или изменить страницу или добавить BLOB-объекты, см. PageBlobClient или AppendBlobClient.

Поэтому вам, вероятно, следует использовать BlockBlobClient или что-то, что можно обновить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...