Изменить размер изображения ДО загрузки в хранилище BLOB-объектов Azure

Я пытаюсь изменить размер изображения с помощью помощника WebImage ПЕРЕД загрузкой в ​​BLOB-объект Azure, используя следующий код, но получаю эту ошибку:

cannot convert from 'system.web.helpers.webimage' to 'system.io.stream'

Код выглядит следующим образом:

    public async Task<string> UploadPropertyImageAsync(HttpPostedFileBase imageToUpload)
    {
        string imageFullPath = null;
        if (imageToUpload == null || imageToUpload.ContentLength == 0 || imageToUpload.ContentLength >= 8388608)
        {
            return null;
        }
        //Image img = System.Drawing.Image.FromStream(imageToUpload);
        WebImage img = new WebImage(imageToUpload.InputStream);
        if (img.Width > 1000)
            img.Resize(1000, 1000); 
        try
        {
            CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
            CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("property");

            if (await cloudBlobContainer.CreateIfNotExistsAsync())
            {
                await cloudBlobContainer.SetPermissionsAsync(
                    new BlobContainerPermissions
                    {
                        PublicAccess = BlobContainerPublicAccessType.Blob
                    }
                    );
            }
            string imageName = Guid.NewGuid().ToString() + "-" + Path.GetExtension(img.FileName);

            CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(imageName);
            cloudBlockBlob.Properties.ContentType = img.ContentType;
            await cloudBlockBlob.UploadFromStreamAsync(img);

Любая идея, где я иду не так?

2 ответа

Решение

CloudBlockBlob.UploadFromStreamAsync ожидает поток, который ваш WebImage Объекта нет и, следовательно, вы получаете эту ошибку.

Что вам нужно сделать, это преобразовать изображение в поток. Я посмотрел документацию, и нет прямого способа сделать это.

Однако вы можете получить байты из WebImage, используя WebImage.GetBytes а затем использовать CloudBlockBlob.UploadFromByeArrayAsync метод для загрузки этого байтового массива в виде BLOB-объекта в хранилище Azure.

Исключение самоочевидно.

Эта линия ожидает Streamне WebImage переменная.

await cloudBlockBlob.UploadFromStreamAsync(img);

Существует множество примеров, показывающих, как загружать файлы в Azure, например:

Загрузка в Azure

... и здесь...

Введение в хранилище больших двоичных объектов Windows Azure

Другие вопросы по тегам