在上传到 Azure Blob 存储之前调整图像大小
Resize image BEFORE uploading to Azure blob storage
我尝试在上传到 Azure blob 之前使用 WebImage 帮助程序调整图像大小,使用以下代码,但出现此错误:
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);
知道我哪里出错了吗?
这个例外很容易解释。
此行需要 Stream
,而不是 WebImage
变量。
await cloudBlockBlob.UploadFromStreamAsync(img);
有很多示例展示了如何将文件上传到 Azure,例如:
Uploading to Azure
...这里...
CloudBlockBlob.UploadFromStreamAsync
需要一个您的 WebImage
对象不是的流,因此您会收到此错误。
您需要做的是将图像转换为流。我查阅了文档,没有直接的方法可以这样做。
但是,您可以使用 WebImage.GetBytes
and then use CloudBlockBlob.UploadFromByeArrayAsync
方法从 WebImage 获取字节,将该字节数组作为 blob 上传到 Azure 存储中。
我尝试在上传到 Azure blob 之前使用 WebImage 帮助程序调整图像大小,使用以下代码,但出现此错误:
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);
知道我哪里出错了吗?
这个例外很容易解释。
此行需要 Stream
,而不是 WebImage
变量。
await cloudBlockBlob.UploadFromStreamAsync(img);
有很多示例展示了如何将文件上传到 Azure,例如:
Uploading to Azure
...这里...
CloudBlockBlob.UploadFromStreamAsync
需要一个您的 WebImage
对象不是的流,因此您会收到此错误。
您需要做的是将图像转换为流。我查阅了文档,没有直接的方法可以这样做。
但是,您可以使用 WebImage.GetBytes
and then use CloudBlockBlob.UploadFromByeArrayAsync
方法从 WebImage 获取字节,将该字节数组作为 blob 上传到 Azure 存储中。