2013-03-28 40 views
3

我正在开发一个个人项目来管理我的俱乐部的用户,它在免费的Azure包(至少现在)上托管,部分是作为尝试Azure的实验。创建记录的一部分是添加一张照片,所以我有一个联系人卡片视图,可以让我看到他们是谁,他们什么时候出现以及照片。如果在Azure blob中使用ImageResizer,我需要AzureReader2插件吗?

我已经安装了ImageResizer,它真的很容易从我的相机调整10MP的照片,并将其保存到文件系统在本地,但似乎为天青我需要使用他们BlobsUpload Pictures to Windows Azure Web Sites,这是新的我。 documentation on ImageResizer表示我需要使用AzureReader2才能使用Azure blob,但它不是免费的。它还在他们的best practices中说#5到

使用动态调整大小而不是预先调整图像大小。

这不是我在想什么,我打算在创建用户记录时调整到300x300和75x75(缩略图)。但是,如果我应该将全尺寸图像存储为斑点并动态调整大小,那么我可以使用标准方法将Upload a blob into a container保存到Azure,然后当我想要显示图像时,使用ImageResizer并将每个图像传递给根据需要调整大小。这种方式不需要使用AzureReader2,或者我误解了它的作用/它是如何工作的?

还有另外一种方法可以考虑吗?

我没有尚未实现裁剪,但是这是未来解决时,我已经计算出如何实际存储图像正确

回答

10

有些恐慌,我在这里不同意astaykov。我相信你可以使用ImageResizer和Azure,而不需要AzureReader2。也许我应该通过说'它适用于我的设置':)

我在MVC 3应用程序中使用ImageResizer。我有一个图像容器的标准Azure帐户。

下面是认为我的测试代码:

@using (Html.BeginForm("UploadPhoto", "BasicProfile", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="file" /> 
    <input type="submit" value="OK" /> 
} 

而这里的中邮操作方法相应的代码:

// This action handles the form POST and the upload 
[HttpPost] 
public ActionResult UploadPhoto(HttpPostedFileBase file) 
{ 
    // Verify that the user selected a file 
    if (file != null && file.ContentLength > 0) 
    { 
     string newGuid = Guid.NewGuid().ToString(); 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 

     // Create the blob client. 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference("images"); 

     // Retrieve reference to the blob we want to create    
     CloudBlockBlob blockBlob = container.GetBlockBlobReference(newGuid + ".jpg"); 

     // Populate our blob with contents from the uploaded file. 
     using (var ms = new MemoryStream()) 
     { 
      ImageResizer.ImageJob i = new ImageResizer.ImageJob(file.InputStream, 
        ms, new ImageResizer.ResizeSettings("width=800;height=600;format=jpg;mode=max")); 
      i.Build(); 

      blockBlob.Properties.ContentType = "image/jpeg"; 
      ms.Seek(0, SeekOrigin.Begin); 
      blockBlob.UploadFromStream(ms); 
     } 
    } 

    // redirect back to the index action to show the form once again 
    return RedirectToAction("UploadPhoto"); 
} 

这是“粗略的”代码来测试理论和可以肯定会有所改进,但它在本地和Azure上部署时都可以工作。我还可以查看我上传的图片,这些图片的大小已正确调整。

希望这可以帮助别人。

1

答案的具体问题:

如果使用ImageResizer与Azure blob是否需要AzureReader2 插件?

YES。正如Image Resizer的文档中所述 - 该插件用于从Blob存储中读取/处理/提供图像。所以毫无疑问 - 如果您要使用Image Resizer,AzureReader2是您需要的插件,以使事情正确。它会照顾Blob上传/服务。

尽管我在Windows Azure上质疑Image Resizer的团队胜任能力,因为他们引用Azure SDK v.2,而最新版本的Azure SDK是1.8。他们的意思是Azure存储客户端库,其版本号为1.72.x。建议使用版本2.x,并使用Azure SDK 1.8。所以,不要搜索Azure SDK 2.0,安装最新版本,即1.8。顺便说一下,使用Nuget Package Manager安装Azure存储库v。2.0.x.

+0

“AzureReader2”插件负责为您提供所有Azure相关工作,但可以在不使用插件的情况下使用ImageResizer和Azure blob **只需遵循这些说明http:// www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/ –

1

您也可以将调整后的版本上传到azure。因此,您首先将原始图像上传为blob,并用名称/original/xxx.jpg表示;然后创建一个图像大小调整并上传到azure,名称为/thumbnail/xxx.jpg。如果您想在动态或单独的线程上创建大小调整后的版本,则可能需要暂时将原始文件保存到磁盘。

相关问题