影像檔管理 (Chart 控制項)
當 RenderType 屬性設定為 ImageTag 時,Chart 控制項會將呈現的圖表影像儲存成記憶體或磁碟中的檔案 (如需詳細資訊,請參閱圖表影像呈現)。您可以指定 Chart 控制項管理影像檔的方式。您可以使用 ImageStorageMode 屬性來完成這個工作。
在 ImageStorageMode 屬性中,您可以選擇使用圖表 HTTP 處理常式來管理影像檔,或手動管理影像檔。
使用圖表 HTTP 處理常式
預設的情況下,ImageStorageMode 屬性設定為 UseHttpHandler。這會讓 Chart 控制項使用 Web.config 檔中登錄的 ChartHttpHandler 來管理呈現的圖表影像。
使用圖表 HTTP 處理常式可以:
避免伺服器叢集或多處理序站台發生檔案覆寫衝突。
防止使用者下載為其他使用者呈現的圖表影像,保護所呈現圖表影像的安全性。
將影像檔儲存在記憶體或其他儲存選項,例如 Microsoft SQL Server,減少磁碟作業。
使用方式
當您將 Chart 控制項從 [工具箱] 拖曳到 ASP.NET 頁面的設計介面時,ChartHttpHandler 會自動在 Web.config 檔中登錄為 "ChartImageHandler"。您可以在 <appSettings> 項目中設定 ChartImageHandler 的行為。以下是適用的程式碼區段以及自動產生的設定:
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
請使用 value 屬性中的參數來設定圖表 HTTP 處理常式。如需每個參數的說明,請參閱下表。
參數 |
說明 |
---|---|
storage |
儲存模式。可用的選項有三個:
|
url |
影像儲存位置的相對 URL。如果指定 dir 參數,則會用它來取代 url。 預設值為 "~/"。 |
dir |
影像儲存位置的絕對目錄路徑。這可以是本機路徑或網路路徑。在伺服器叢集環境中,請使用網路路徑,將暫存檔存放在共用位置。系統會為每個暫存檔指派唯一的電腦 ID,以防止不當覆寫檔案。 |
timeout |
呈現的圖表影像的逾時期限 (以秒為單位)。過了這段時間,就會以更新的影像取代影像。 預設值為 30。 |
handler |
自訂 IChartStorageHandler 實作。此值應格式化為完整組件名稱。例如:MyNamespace.MyClass.MyHandler。 |
privateImages |
隱私權保護。設定為 true 時,如果強制使用下列一些識別類型,就只有擁有者才能下載產生的影像:
預設值為 true。 |
deleteAfterServicing |
從用戶端順利下載後是否應刪除影像。 預設值為 true。 |
webDevServerUseConfigSettings |
使用 Visual Studio 程式開發伺服器在完全信任層級中執行應用程式時,是否要將呈現的圖表影像儲存在記憶體中。 預設值為 true。這表示當您從 Visual Studio 執行 ASP.NET 應用程式時,Web.config 檔中的設定可能沒有作用。 |
不同信任層級中的組態設定
以下是信任層級的清單,並說明信任層級如何影響 Web.config 檔中的組態設定。
完全信任:所有組態變化均適用。
高度信任:無法偵測 ASP.NET 程式開發伺服器。因此,webDevServerUseConfigSettings 沒有任何作用。
中度信任:同高度信任。
低度信任:除了禁止檔案存取,其餘同高度信任。storage 參數必須設定為 session 或 memory。
最低信任:除了圖表 HTTP 處理常式偵測失敗外,其餘同低度信任。這表示 Web.config 檔中的 ChartImageHandler 金鑰是必要的。
手動管理影像
若要手動管理呈現的圖表影像,請將 ImageStorageMode 屬性設定為 UseImageLocation,然後再將 ImageLocation 屬性設定為絕對或相對路徑。
注意
在這種模式中,每個 Chart 控制項會獨立管理其影像儲存。
ImageLocation 屬性可包含路徑以及某些關鍵字。例如:"~/Temp/ChartPic_#SEQ(300,5)"。這個字串由三個項目所組成:
絕對或相對目錄路徑。例如:"~/Temp/"。
檔案名稱或所有影像檔名稱的開頭文字。例如:"ChartPicture_"。
關鍵字。例如:"#SEQ(300, 5)"。
不具關鍵字的 ImageLocation
如果您指定影像位置但無關鍵字,Chart 控制項會使用單一檔案來處理所有影像呈現。產生的檔案路徑會是目錄加上您指定的開頭文字以及 ImageType 屬性中指定的副檔名。例如:"~/Temp/ChartPicture_.png"。
請注意,如果圖表資料或外觀經常變更,影像檔在傳送到用戶端之前可能就會被覆寫,導致用戶端收到不正確的影像。若要避免這個問題,請使用其中一個關鍵字。
具有關鍵字的 ImageLocation
您可以將三個不同的關鍵字插入 ImageLocation 屬性。
關鍵字 |
說明 |
---|---|
#UID |
為每個呈現的圖表影像產生唯一識別項。例如:"~/Temp/ChartPicture#UID"。 使用這個關鍵字可確保伺服器以正確的呈現影像回覆每個頁面要求。您必須手動移除舊檔案。否則,檔案的數目會無止盡成長。 |
#SEQ(maxFiles,minutes) |
產生檔案序號,直至 maxFiles 定義的數字為止,然後再次開始序列並取代序列中的第一個檔案。例如:"Picture_#SEQ(300,5)" 會產生下列檔案名稱 (假設 ImageType 設定為 Png):Picture_000001.jpg、Picture_000002.jpg... minutes 參數會指定每個檔案在序列中的逾時時間。不過,這不保證檔名在指定期間的有效性。如果檔案在逾時期限超過之前即回收,系統會在應用程式事件記錄檔插入警告訊息。您應將 maxFile 參數設定成夠大的數字,以避免不當覆寫影像檔。 |
#NOGUIDPARAM |
從影像檔的 URL 移除 GUID 字串。例如:"Picture_#SEQ(300,5)#NOGUIDPARAM"。 根據預設,Chart 控制項會將 GUID 字串加入至影像 URL。 |
影像類型與壓縮
當圖表影像儲存成暫存檔時,若要指定影像類型,請使用 Chart 控制項的 ImageType 屬性。如果您將這個屬性設定為 Jpeg,也可以在 Chart 控制項的 Compression 屬性中指定 JPEG 壓縮。