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 控件的代码隐藏文件中。

ASP.NET 图表自定义处理程序

在上面的代码中,将映像存储在 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 存储进行验证。

现在,当您阅读它时,只需读取密钥,您将获得预期的文件名。您可能需要修改代码才能获得所需的方式,但是我已经为您提供了如何做到这一点的想法。