Загрузка изображений из хранилища BLOB-объектов Azure - PullRequest
0 голосов
/ 12 июня 2018

Я пишу программу, которая может загружать изображения из указанных путей к файлам из нашего хранилища Azure.

Я собрал следующую функцию из кода, найденного в Интернете, и затем удалил ошибки.Тем не менее, последние ошибки, от которых я не могу избавиться.

Полный код ниже:

using System;
using System.Windows.Forms;
using Microsoft.WindowsAzure.Storage;

using Microsoft.WindowsAzure.Storage.Blob;
using System.IO;
namespace WarehousePhotoProgram
{
    public partial class Form1 : Form
    {
        string storageConnectionString = Environment.GetEnvironmentVariable("storageconnectionstring");

    public Form1()


       {
            InitializeComponent();
        }

        private void DownloadFileFromBlob(string fileName, string containerName)
        {
            CloudStorageAccount account = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(storageConnectionString));
            CloudBlobClient blobClient = account.CreateCloudBlobClient();
            CloudBlobContainer container = blobClient.GetContainerReference(containerName);
            CloudBlob blob = container.GetBlobReference(fileName);
            MemoryStream memStream = new MemoryStream();
            blob.DownloadToStream(memStream);
            Response.ContentType = blob.Properties.ContentType;
            Response.AddHeader("Content-Disposition", "Attachment; filename=" + fileName.ToString());
            Response.AddHeader("Content-Length", blob.Properties.Length.ToString());
            Response.BinaryWrite(memStream.ToArray());

        }
    }
   }

В настоящее время код ошибки RoleEnvironment говорит о том, что пространство имен не существует, я пропустил ссылку на сборку?Или мне нужно импортировать еще using.Вторая ошибка на всех Result., снова заявляя, что Response не существует.

Является ли это также лучшим подходом к загрузке изображений из BlobStorage или я должен использовать другой подход к нему?

РЕДАКТИРОВАТЬ: я исправил ошибку RoleEnvironment с помощью данного ответа,Теперь попытайтесь определить, что раздел ответа должен также измениться.

        public Form1()
    {
        InitializeComponent();
        //_storageAccount = CloudStorageAccount.Parse(storageConnectionString);

        DownloadFileFromBlob("029000/1.png", "warehouseimages", "Desktop");
    }

    private void DownloadFileFromBlob(string fileName, string containerName, string localFilePath)
    {
        CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
        CloudBlobClient blobClient = account.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(containerName);
        CloudBlob blob = container.GetBlobReference(fileName);
        using (var fileStream = System.IO.File.OpenWrite(localFilePath))
        {
            blob.DownloadToStream(fileStream);
            MessageBox.Show("SUCCESS");
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

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

    /// <summary>
    /// Download File From Blob
    /// </summary>
    /// <param name="fileName">For example: image.PNG</param>
    /// <param name="containerName">container name of blob</param>
    /// <param name="localFilePath">For example: @"C:\Test\BlobTest.PNG"</param>
    private void DownloadFileFromBlob(string fileName, string containerName, string localFilePath)
    {
        CloudStorageAccount account = CloudStorageAccount.Parse("Your connection string");
        CloudBlobClient blobClient = account.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(containerName);
        CloudBlob blob = container.GetBlobReference(fileName);
        using (var fileStream = System.IO.File.OpenWrite(localFilePath))
        {
            blob.DownloadToStream(fileStream);
        }
    }
0 голосов
/ 12 июня 2018

Класс RoleEnvironment является частью пространства имен Microsoft.WindowsAzure.ServiceRuntime, которое я знаю по старым классическим облачным сервисам.

Вам, вероятно, следует использовать ConfigurationManager для получения ваших настроек.

См. Конфигурация в ASP.NET Core или, если вы используете полную платформу .NET, узнайте больше об этом здесь .

...