ASP.NET 图表自定义处理程序
本文关键字:处理 程序 自定义 NET ASP | 更新日期: 2023-09-27 18:36:30
以前,当我的Web应用程序是"本地"解决方案时,我使用"标准"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.pngchart_1.png...
我怎样才能像以前一样管理自己的文件名。我尝试添加ImageLocation="~/files/categories_#SEQ(30,20)"
asp.net 图表控件,但没有成功。如何设置自己的名称(键)以及放置位置?在处理程序中,asp.net 图表控件或在声明 char 控件的代码隐藏文件中。
在上面的代码中,将映像存储在 Azure Blob 存储中时,会直接将其存储在容器中,以便在访问它们时检索为
http://azure_storage_name.*/_containername_/chartimage_name
或者,可以创建文件夹类型图表映像名称,例如文件/categories_1和文件/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 存储/container_name/files/myimage_1.jpg 中,您可以通过访问 Windows Azure 存储进行验证。
现在,当您阅读它时,只需读取密钥,您将获得预期的文件名。您可能需要修改代码才能获得所需的方式,但是我已经为您提供了如何做到这一点的想法。