Изменить размер изображения ДО загрузки в хранилище 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, например:
... и здесь...
Введение в хранилище больших двоичных объектов Windows Azure