如果将ImageResizer与Azure Blob一起使用,我是否需要AzureReader2插件?

如果将ImageResizer与Azure Blob一起使用,我是否需要AzureReader2插件?,azure,azure-storage-blobs,imageresizer,Azure,Azure Storage Blobs,Imageresizer,我正在做一个个人项目来管理我的俱乐部的用户,它托管在免费的Azure软件包上(至少现在是这样),部分是为了试用Azure。创建他们的记录的一部分是添加一张照片,所以我有一个名片视图,可以让我看到他们是谁,他们什么时候来的,还有一张照片 我已经安装了,从我的相机调整10MP照片的大小并将其保存到本地文件系统非常容易,但是对于Azure,我似乎需要使用它们的blob来,这对我来说是新的。上面说我需要使用AzureReader2来处理Azure Blob,但这不是免费的。在他们的#5到 使用动态调整大

我正在做一个个人项目来管理我的俱乐部的用户,它托管在免费的Azure软件包上(至少现在是这样),部分是为了试用Azure。创建他们的记录的一部分是添加一张照片,所以我有一个名片视图,可以让我看到他们是谁,他们什么时候来的,还有一张照片

我已经安装了,从我的相机调整10MP照片的大小并将其保存到本地文件系统非常容易,但是对于Azure,我似乎需要使用它们的
blob
来,这对我来说是新的。上面说我需要使用
AzureReader2
来处理Azure Blob,但这不是免费的。在他们的#5到

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

这不是我所想的,在创建用户记录时,我打算将大小调整为300x300和75x75(用于缩略图)。但是,如果我应该将完整大小的图像存储为blob并在退出时动态调整大小,那么我可以使用标准方法将其保存到Azure,然后当我想要显示图像时,使用ImageResizer并将其传递给每个图像以根据需要调整大小。这样就不需要使用AzureReader2,或者我是否误解了它的功能/工作原理

<> P>有另一种方法考虑吗?< /P>
我还没有实现裁剪,但这是下一个要解决的问题,当我研究出如何正确存储图像时,具体问题的答案是:

如果对Azure Blob使用ImageResizer,我需要AzureReader2吗 插件

。正如Image Resizer文档中所述,该插件用于从Blob存储中读取/处理/提供图像。所以,毫无疑问,如果你打算使用图像大小调整器,AzureReader2是你所需要的插件,以使事情正确。它将负责Blob上传/服务


尽管我质疑Image Resizer在Windows Azure上的团队能力,因为他们引用的是
Azure SDK v.2
,而Azure SDK的最新版本是
1.8
。他们的意思是Azure存储客户端库,它的版本为
1.7
2.x
。而版本
2.x
则是推荐使用的版本,并随Azure SDK 1.8提供。因此,不要搜索Azure SDK 2.0,请安装最新版本,即1.8。顺便说一下,使用Nuget软件包管理器安装Azure存储库v。2.0.x.

您还可以将调整大小的版本上载到azure。因此,您首先将原始图像作为一个blob上传,比如名称为/original/xxx.jpg;然后创建图像的大小调整,并将其上载到azure,名称为/thumboil/xxx.jpg。如果您想在运行中或在单独的线程上创建调整大小的版本,可能需要将原始版本临时保存到磁盘。

我不同意astaykov的观点。我相信你可以在Azure上使用ImageResizer,而不需要AzureReader2。也许我应该通过说“它在我的设置中起作用”来限定这一点:)

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

以下是我的视图测试代码:

@using (Html.BeginForm( "UploadPhoto", "BasicProfile", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="OK" />
}
这是测试理论的“粗略且准备就绪”的代码,当然可以进行改进,但是,它在本地和部署到Azure上都可以工作。我还可以查看我上传的图像,这些图像的大小已经正确调整


希望这对其他人有所帮助。

AzureReader2插件为您处理所有与Azure相关的工作,但是可以在没有插件的情况下使用
ImageResizer
和Azure Blob-您只需按照以下说明操作即可
// 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");
}