在上传到Azure blob存储之前调整图像大小

时间:2016-12-12 11:59:37

标签: asp.net asp.net-mvc azure blob webimage

我正在尝试使用WebImage帮助程序调整图像大小,然后使用以下代码上传到Azure blob,但是出现此错误:

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 个答案:

答案 0 :(得分:2)

CloudBlockBlob.UploadFromStreamAsync期望您的WebImage对象不是一个流,因此您收到此错误。

您需要做的是将图像转换为流。我查阅了文档,没有直接的方法可以这样做。

但是,您可以使用WebImage.GetBytes从WebImage获取字节,然后使用CloudBlockBlob.UploadFromByeArrayAsync方法将该字节数组作为Blob上传到Azure存储中。

答案 1 :(得分:1)

例外是非常自我解释的。

这一行期待Stream,而不是WebImage变量。

await cloudBlockBlob.UploadFromStreamAsync(img);

有很多示例显示如何将文件上传到Azure,例如:

Uploading to Azure

......在这里......

An Introduction to Windows Azure BLOB Storage