在我的Web應用程序是「內部部署」解決方案之前,我使用「標準」asp.net圖表控件和磁盤存儲模式。像這樣: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控件的代碼隱藏文件中。
謝謝。但我想在asp.net圖表控件中定義自己的圖表名稱,如本地方式(使用#SEQ()).Save()函數需要獲得「我自己的定義」鍵,因爲我需要生成在不同的用戶(不同的名稱)的代碼隱藏... – rjovic
我還沒有嘗試過,但是你可以首先使用#SEQ創建一個這樣的名字表,然後選擇一個名稱作爲密鑰傳遞這樣你就會得到你想要的。或者,您可以使用不同的用戶名文件夾「filesX」,然後將文件名稱創建爲「fileX/image」和「fileY/image」。這樣你可以達到你想要的。 – AvkashChauhan