先說說服務器上怎麼存儲圖片,一般的方式有兩種,第一種是直接把圖片存在數據庫中,然後需要的時候從數據庫中把圖片拿出來,當然這用效率不用想你也知道。 另外一種方式別人給你圖片,你把圖片存下來,然後把圖片存儲的地址存下來,放在數據庫中。以後別人請求的時候,他只要把圖片的路徑給你,你給他返回就OK了。
那再來來說說mvc web api中輸出圖片吧
在之前呢,給別人的接口直接是把文件夾直接放上服務器的端口上的,數據庫返回路徑,讓直接去服務器上拿;不得不說這種方法確實能實現,但是呢,安全性很差,任何一個人都可以去你的藉口裏去拿圖片,第二的網絡的ddos攻擊,只要試出你的接口,他們就可以無限制的去下載圖片,對於你服務器的壓力和流量,不用想也知道的吧。
so,我們應該把這個東西寫在接口中,然後別人訪問你接口的時候你應該設計祕鑰或者sessionId的東東來對你的訪客進行確認(當然這是寫接口所必須的)
下面附上mvc web api中輸出圖片的方法
public HttpResponseMessage get(string path)
{
Image img = Image.FromFile(@"D:\picture\"+path); //這裏我把路徑給出了,他只用給我文件名
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(ms.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/Png"); //設置http響應上的Content-Type 爲image/Png媒體類型
return result;
}
這樣就通過接口返回了一個圖片;
下來附上asp.net的圖片輸出,因爲圖片是在代碼中直接輸出的所以比較簡單
附上代碼:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
Image img = Image.FromFile(@"C:\picture\111111.jpg");
//context.Response.Write("Hello World");
MemoryStream s = new MemoryStream();
img.Save(s, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.BinaryWrite(s.ToArray());
}