Как загрузить файл из онлайн-хранилища больших двоичных объектов Azure

Когда я попытался загрузить файл изображения из лазурного BLOB-объекта в Интернете, он выдает исключение: «Формат данного пути не поддерживается». Мой блок кода ниже:

StorageCredentials creds = new StorageCredentials(accountName, accountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
CloudBlobClient client = account.CreateCloudBlobClient();
container = client.GetContainerReference(blobName);


CloudBlockBlob blockBlob = container.GetBlockBlobReference(MyPath);
await blockBlob.DownloadToFileAsync(Path, FileMode.OpenOrCreate);


using (var fileStream = System.IO.File.Create(Path))
{
    await blockBlob.DownloadToStreamAsync(fileStream);
}

Если я укажу локальный путь как «c:\users\Joy\Downloads» в пути, как показано ниже:

var localPath = @"C:\Users\Joy \Downloads\user.jpg" ;
await blockBlob.DownloadToFileAsync(localPath, FileMode.OpenOrCreate);

using (var fileStream = System.IO.File.Create(localPath))
{
    await blockBlob.DownloadToStreamAsync(fileStream);
}

Его можно скопировать в соответствующее место. Но я не смог загрузить файл в свое собственное местоположение.


person Karthik Ravichandran    schedule 27.11.2017    source источник
comment
Каково ваше значение переменной Path? Предполагается, что это локальный путь к файлу.   -  person Zhaoxing Lu    schedule 27.11.2017


Ответы (1)


Согласно вашему описанию, я включил public доступ для чтения к моим большим двоичным объектам, чтобы проверить эту проблему. Я создал консольное приложение, и вы можете обратиться к следующему фрагменту кода для загрузки файла и поддержания виртуального каталога в вашей локальной файловой системе следующим образом:

CloudBlockBlob blockBlob = new CloudBlockBlob(new Uri("https://brucchstorage.blob.core.windows.net/images/2017/11/28/lake.jpeg"));
var localPath = Path.Combine(/*your custom root folder for storing file(s)*/AppDomain.CurrentDomain.BaseDirectory,$"downloads\\{blockBlob.Name}"); //blockBlob.Name =2017/11/28/lake.jpeg
var rootDir = new FileInfo(localPath).Directory;
if (!rootDir.Exists) //make sure the parent directory exists
    rootDir.Create();

await blockBlob.DownloadToFileAsync(localPath,FileMode.Create);

//OR

using (var fs = new FileStream(localPath, FileMode.Create))
{
    await blockBlob.DownloadToStreamAsync(fs);
}

Результат:

введите здесь описание изображения

Кроме того, вы можете создать экземпляр CloudBlockBlob с Uri, содержащим токен SAS, следующим образом:

https://brucchstorage.blob.core.windows.net/images/2017/11/28/lake.jpeg?st=2017-11-28T06%3A28%3A00Z&se=2017-11-29T06%3A28%3A00Z&sp=r&sv=2015-12-11&sr=b&sig=15NAaRB43C%2BniIZZe8gAvFl7LY%2BS6K7DNyjLflpvgBg%3D  

Дополнительные сведения см. на странице здесь.

person Bruce Chen    schedule 28.11.2017