目前負責的一個項目,圖片存儲方式是將上傳的圖片存儲在數據庫中。這種存儲方式形成的最直接影響就是,致使數據庫數據文件過大基本沒法備份,對數據庫的性能也有很大的反作用,圖片寫入和讀取的速度也是慢的驚人。有了問題就得修改,網上查了一通資料,結合項目的實際狀況定下來一個方案。由於使用的是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; } }
}
心得:併發