在我的 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 中编辑了图表设置以使用这个新的处理程序。
此处理程序有效,但我的图片以通用名称保存:
图表_0.png 图表_1.png ...
我怎样才能像以前一样管理自己的文件名。我尝试添加ImageLocation="~/files/categories_#SEQ(30,20)"
到asp.net图表控制但没有成功。如何设置自己的名称(键)以及放置位置?在处理程序、asp.net 图表控件或声明 char 控件的代码隐藏文件中。