2018/05/08

SampleCMS 附件管理共用元件說明:附件下載共用元件 AttDownloadCommon 使用方式

在 附件管理功能概述 提到了 SampleCMS 附件管理的四項主要功能「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」。

上一篇 附件管理共用元件 AttachFileManagerLogic 使用方式 說明附件管理共用元件 AttachFileManagerLogic 在上述功能中「儲存(更新)附件資訊與檔案、檢視附件資訊、刪除附件檔案」負責的工作。

這一篇繼續說明附件下載共用元件 AttDownloadCommon 在「下載附件檔案」負責的工作。

下列以附件檔案下載網頁程式 FileAtt.ashx 與照片檔案下載網頁程式 FileArtPic.ashx 的程式碼說明共用元件的使用方式。
/// <summary>
/// 附件檔案下載
/// </summary>
public class FileAtt : IHttpHandler
{
    protected AttDownloadCommon c;

    public void ProcessRequest(HttpContext context)
    {
        c = new AttDownloadCommon(context, null);
        // ...略...
        if (!c.ProcessRequest())
        {
            context.Response.Redirect("ErrorPage.aspx", true);
        }
    }
    // ...略...
}

/// <summary>
/// 網頁照片下載
/// </summary>
public class FileArtPic : IHttpHandler
{
    protected ArtPicDownloadCommon c;

    public void ProcessRequest(HttpContext context)
    {
        c = new ArtPicDownloadCommon(context, null);
        // ...略...
        if (!c.ProcessRequest())
        {
            context.Response.Redirect("ErrorPage.aspx", true);
        }
    }
    // ...略...
}

Line 10, 29: 初始化附件與照片的檔案下載共用元件。

Line 12, 31: 呼叫共用元件的 ProcessRequest() ,由對應的共用元件從網址參數中取得需要的附件代碼或照片代碼之後,再從資料庫取得對應的附件資訊,以附件資訊找到磁碟中的指定檔案,將指定檔案內容傳送給使用者的瀏覽器。

* 完整程式碼請參考 FileAtt.ashxFileArtPic.ashx

上述附件與照片的檔案下載共用元件延用 網頁共用元件 的架構,利用元件中的 Request, Response 屬性來取得網址參數與傳送檔案內容。下列為附件檔案下載元件關聯圖。
附件檔案下載元件關聯圖
抽象基底類別 FileDownloadCommon 負責拿到衍生類別 AttDownloadCommon, ArtPicDownloadCommon 提供的指定實體檔案位置之後的所有事情(判斷實體檔案是否存在、讀取實體檔案內容、依設定壓縮圖檔、傳送檔案內容給使用者)。

附件與照片的檔案下載共用元件 AttDownloadCommon, ArtPicDownloadCommon 繼承 FileDownloadCommon ,各自改寫 GetFileFullName(Guid attId): string ,依照 attId 的值到資料庫取回附件資訊與照片資訊,組合出實體檔案位置讓 FileDownloadCommon 完作工作。

下列以循序圖說明附件檔案下載元件內部流程,
  1. 使用者開啟 FileAtt.ashx 下載指定附件代碼的檔案。
  2. FileAtt.ashx 初始化附件下載共用元件 AttDownloadCommon。
  3. FileAtt.ashx 呼叫 AttDownloadCommon.ProcessRequest() ,實際執行的程式為 FileDownloadCommon.ProcessRequest()。
  4. 在 ProcessRequest() 之中呼叫 GetFileFullName(qsAttId) ,實際執行的程式為 AttDownloadCommon.GetFileFullName(attId)。
  5. AttDownloadCommon 從資料庫取得附件資訊(儲存目錄、儲存的檔案名稱),拚湊出附件的實體檔案完整路徑。
  6. 回傳實體檔案完整路徑。
  7. FileDownloadCommon 呼叫 Export(string fileName, string fileFullName) 要輸出檔案給用戶端。
  8. 從磁碟讀取檔案內容。
  9. 若檔案為圖檔而且需要壓縮時,壓縮圖檔內容。
  10. 將檔案內容傳送給使用者的瀏覽器。
* 完整程式碼請參考 FileDownloadCommon.cs




沒有留言:

張貼留言