Как вернуть изображение в вид из личной учетной записи Azure Blob Stroage в ASP. NET Core? - PullRequest
1 голос
/ 06 апреля 2020

Я установил приватные контейнеры для хранения больших двоичных объектов * 1015, и у меня есть общий ключ доступа, который я определил в своем основном приложении asp. net. Для заданий, таких как перечисление содержимого хранилища больших двоичных объектов, это работает хорошо, но теперь я чувствую, что мне нужно вернуть файл изображения для отображения в моем представлении. Проблема в том, что когда я возвращаю большой двоичный объект, да, я могу получить к нему доступ в контроллере, но он просто возвращает строку в ее местоположение, доступ к этому местоположению без ключа доступа возвращает ошибку Resource not found, что ожидается.

Мой вопрос: как вернуть блоб изображения, для которого требуется общий ключ доступа? Вот мой код, который возвращает Uri только в виде строки, которая бесполезна по вышеуказанной причине. Нужно ли загружать изображение и хранить его временно или что-то?

Использование CarController

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

CarController.cs

[HttpGet]
public IActionResult Edit(int id)
{
    var car = _carService.GetCar(id);

    string strContainerName = "uploads";    
    string filePrefix = "car/" + id + "/car-image.jpg";
    var filelist = new List<BlobListViewModel>();

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

    //Get the specific image 
    var blob = containerClient.GetBlobClient(filePrefix);

    //I'm binding to a view model as a string, which, as I say, doesn't work for security reasons.
    var data = new BlobListViewModel {
        FileName = blob.Uri.ToString()
    };

        return View(data);
    }

1 Ответ

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

Для чтения из частного контейнера вам необходимо создать Shared Access Signature для большого двоичного объекта или контейнера больших двоичных объектов с разрешением не менее Read.

Вот код ты можешь использовать. В этом случае я создаю токен SAS для BLOB-объекта с разрешением Read, срок действия которого истекает через 1 минуту с момента его создания.

        BlobSasBuilder blobSasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = strContainerName,
            BlobName = filePrefix,
            ExpiresOn = DateTime.UtcNow.AddMinutes(1),
        };
        blobSasBuilder.SetPermissions(BlobAccountSasPermissions.Read);
        var sasToken = blobSasBuilder.ToSasQueryParameters(new Azure.Storage.StorageSharedKeyCredential(accountName, accountKey)).ToString();
        var blob = containerClient.GetBlobClient(filePrefix);
        var blobSasUrl = blob.Uri.ToString() + "?" + sasToken;
        //I'm binding to a view model as a string, which, as I say, doesn't work for security reasons.
        var data = new BlobListViewModel
        {
            FileName = blobSasUrl
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...