記一次圖片存儲方式的修改(使用wcf和iis進行圖片的上傳和發佈)

目前負責的一個項目,圖片存儲方式是將上傳的圖片存儲在數據庫中。這種存儲方式形成的最直接影響就是,致使數據庫數據文件過大基本沒法備份,對數據庫的性能也有很大的反作用,圖片寫入和讀取的速度也是慢的驚人。有了問題就得修改,網上查了一通資料,結合項目的實際狀況定下來一個方案。由於使用的是windows平臺,項目的開發環境是.net,因而決定採用wcf進行圖片上傳,圖片以文件形式存儲在服務器上,採用iis發佈上傳的圖片。程序員

上傳流程:各類終端採集圖片——>上傳到網站應用程序——>網站應用程序調用wcf接口圖片上傳——>wcf將圖片以文件形式存儲在對應的圖片服務器上,圖片按日期和類別分文件夾存儲數據庫

發佈流程:在圖片服務器上安裝iis,新建虛擬目錄指向圖片存儲的文件夾。終端(包括瀏覽器)請求圖片——>網站應用程序調用wcf獲取圖片url接口——>將圖片url返回給終端windows

部署方式:wcf部署在圖片服務器上,和網站應用程序服務器在一個局域網內。瀏覽器

wcf服務代碼:包括了上傳圖片,獲取圖片url,獲取縮略圖url,旋轉圖片4個接口。服務器

// 注意: 使用「重構」菜單上的「重命名」命令,能夠同時更改代碼和配置文件中的接口名「IService1」。
    [ServiceContract]
    public interface IPictureService
    {
        [OperationContract]
        void UploadPicture(RemoteFileInfo transferPic);

        [OperationContract]
        string GetPictureURL(string date, string depCode, string picName, out bool isExist);

        [OperationContract]
        string GetThumbPictureURL(string date, string depCode, string picName, out bool isExist);

        [OperationContract]
        void Rotate(string date, string depCode, string picName, string angle);

    }

    [MessageContract]
    public class ReturnInfo
    {
        [MessageHeader(MustUnderstand = true)]
        public string URL;
    }


    [MessageContract]
    public class RemoteFileInfo : IDisposable
    {
        /// <summary>
        /// 部門編碼
        /// </summary>
        [MessageHeader(MustUnderstand = true)]
        public string DepCode;

        /// <summary>
        /// 日期,格式"20130808"
        /// </summary>
        [MessageHeader(MustUnderstand = true)]
        public string Date;

        /// <summary>
        /// 圖片名稱,與數據庫圖片表中的主鍵值相同,包括擴展名
        /// </summary>
        [MessageHeader(MustUnderstand = true)]
        public string PicName;

        /// <summary>
        /// 圖片內容
        /// </summary>
        [MessageBodyMember(Order = 1)]
        public System.IO.Stream FileByteStream;

        public void Dispose()
        {
            if (FileByteStream != null)
            {
                FileByteStream.Close();
                FileByteStream = null;
            }
        }
  }

心得:併發

  1. 把獲取圖片url的接口放在wcf中,是爲了將圖片url生成的邏輯和業務系統分離,作改動更加方便。
  2. 文件實際存儲的路徑採用「盤符:\圖片目錄\日期\部門編號\圖片文件名」的格式,之後若圖片數據太多,能夠將舊數據放到別的服務器上用iis或其餘工具發佈,wcf服務修改一下url的生成規則便可。
  3. 所有是.net平臺的技術,.net程序員很容易搞定。
  4. 對於負載均衡和性能方面考慮的很少,目前項目夠用,但對於高併發要求的系統,未必能達到要求。
相關文章
相關標籤/搜索