Я загрузил несколько изображений в контейнер BLOB-объектов в учетной записи хранения Azure типа StorageV2 (общего назначения, версия 2).

Они были загружены программно. Вот код, который я использовал:

public Task CopyFile(string fileName, string targetPath)
{
    var blobRef = Container.GetBlockBlobReference(targetPath);

    blobRef.Properties.ContentType = GetContentType(fileName);

    return blobRef.UploadFromFileAsync(fileName);
}

public string GetContentType(string fileName)
{
    var provider = new FileExtensionContentTypeProvider();

    if (!provider.TryGetContentType(fileName, out var contentType))
    {
        contentType = "application/octet-stream";
    }

    return contentType;
}

Container является инициализированным экземпляром CloudBlobContainer.

Когда я использую Storage Explorer, я вижу загруженные файлы. Если я просматриваю свойства любого файла, он перечисляет свойство Uri. Однако, если я скопирую значение (URL) и вставлю в браузер, я увижу следующую страницу с ошибкой:

<Error>
    <Code>ResourceNotFound</Code>
    <Message>
        The specified resource does not exist. RequestId:12485818-601e-0017-6f69-56c3df000000 Time:2019-08-19T08:35:13.2123849Z
    </Message>
</Error>

Но если я дважды щелкну файл в Storage Explorer, он загрузит изображение правильно. Насколько я могу судить, используемый им URL-адрес совпадает с тем, который я скопировал ранее, за исключением некоторых дополнительных строк запросов, которые выглядят следующим образом: ?sv=2018-03-28&ss=bqtf&srt=sco&sp=rwdlacup&se=2019-08-19T16:49:38Z&sig=%2FJs7VnGKsjplalKXCcl0XosgUkPWJccg0qdvCSZlDSs%3D&_=1566204636804

Я предполагаю, что это должно означать, что мои BLOB-объекты не являются общедоступными, но я не могу найти настройки, которые сделают мои изображения доступными публично по их известному URI. Кто-нибудь может указать мне правильное направление здесь? Спасибо.

0
Tom Troughton 19 Авг 2019 в 11:54

2 ответа

Лучший ответ

Проверьте уровень доступа, установленный для вашего контейнера. Если это Private , то у вас будет ошибка, с которой вы столкнулись: ResourceNotFound

enter image description here

1
Anton 19 Авг 2019 в 09:07

Насколько я знаю, если уровень доступа вашего контейнера - Private, вы используете прямой URL для доступа к BLOB-объекту, тогда вы получите ошибку. Если вы хотите получить к нему доступ, вам необходимо сгенерировать для него токен SAS. введите описание изображения здесь

Для получения более подробной информации, пожалуйста, обратитесь к

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-access-to-resources https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview

1
user10182254user10182254 19 Авг 2019 в 09:15