在我的网络应用程序是"内部部署"之前我使用的解决方案"标准"具有磁盘存储模式的asp.net图表控件。像这样:
<asp:Chart ID="AssetDistChart" runat="server" BackColor="Transparent"
Width="250px" Height="350px" ImageStorageMode="UseImageLocation" ImageLocation="~/files/categories_#SEQ(30,20)"> ...
有了这个,我的所有图表的图片都是在文件夹/文件中使用名称categories_XXX生成的......这样就完美了。
现在,我需要将我的解决方案转移到Azure平台,并且将图表图像存储在磁盘上不再是我的选择。所以我创建了自己的图表处理程序,用于保存/加载Blob存储中的图表图像。处理程序如下:
public class ChartImageHandler : IChartStorageHandler
{
...
public void Delete(string key)
{
CloudBlob csv = chartContainer.GetBlobReference(key);
csv.Delete();
}
public bool Exists(string key)
{
bool exists = true;
WebClient webClient = new WebClient();
try
{
using (Stream stream = webClient.OpenRead(key))
{ }
}
catch (WebException)
{
exists = false;
}
return exists;
}
public byte[] Load(string key)
{
CloudBlob image = chartContainer.GetBlobReference(key);
byte[] imageArray;
try
{
imageArray = image.DownloadByteArray();
}
catch (Exception e)
{
System.Threading.Thread.Sleep(1000);
imageArray = image.DownloadByteArray();
}
return imageArray;
}
public void Save(string key, byte[] data)
{
CloudBlockBlob pictureBlob = chartContainer.GetBlockBlobReference(key);
pictureBlob.UploadByteArray(data);
}
}
另外,我的asp.net图表控件现在是这样的:
<asp:Chart ID="AssetDistChart" runat="server" BackColor="Transparent"
Width="250px" Height="350px" ImageStorageMode="UseHttpHandler">
我还在web.config中编辑了图表设置以使用这个新的处理程序。
此处理程序有效,但我的图片以通用名称保存:
chart_0.png chart_1.png ...
如何像以前一样管理我自己的文件名。我尝试添加ImageLocation="~/files/categories_#SEQ(30,20)"
到asp.net图表控件但没有成功。如何设置自己的名称(键)以及放置位置?在处理程序,asp.net图表控件或声明char控件的代码隐藏文件中。
答案 0 :(得分:1)
在上面的代码中,当您将图像存储在Azure Blob存储中时,您将其直接存储在容器中,以便在访问它们时将其检索为
http://azure_storage_name.*/_containername_/chartimage_name
或者,您可以创建文件夹类型图表图像名称,例如files / categories_1和files / categories_2等,它们将存储在Azure Blob存储中:
http://azure_storage_name.*/_containername_/files/categories_1
http://azure_storage_name.*/_containername_/files/categories_2
要获得它,您只需在将其保存在Save()函数中时更改代码:
string key = "files/myimage_1.jpg";
CloudBlockBlob pictureBlob = container.GetBlockBlobReference(key);
因此,当您保存图像时,它将保存为您的azure storage /container_name/files/myimage_1.jpg,您可以通过访问Windows Azure存储进行验证。
现在,当您阅读它时,只需读取密钥,您就会得到预期的文件名。您可能需要按摩您的代码以获得您想要的方式,但我已经告诉您如何做到这一点。