一般在上傳圖檔格式的判斷都會用副檔名的方式來做判斷方式大概就像是這樣

先設定好限制的檔案格式再讀取上傳檔的副檔名之後再比對回傳True或False:

Boolean FileChk = false;
string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
string[] allowedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tif" };
for (int i = 0; i <= allowedExtensions.Length - 1; i++)
{
  if (fileExtension == allowedExtensions[i])
  FileChk = true;
}

最近剛好想到有看過人家是用讀取上傳檔表頭Byte內容做驗證

http://www.mikekunz.com/image_file_header.html

將它用c#的方式做了一次

因為一向記性都不好如果不記下來怕又忘了........

才幾行程式也不是很難....我的做法只有讀前十個byte之後再取前二個Byte做判斷

不過Jpeg應該可以讀前四個會比較準吧.....

看文章裡頭標示的表頭Byte及對應的Hex是這樣說的

這樣判斷可能會更嚴謹一點吧.....

如果剛好有需要的可以直接Copy回去用就好了

System.IO.Stream sr = FileUpload1.PostedFile.InputStream;

Byte[] Buffer = new Byte[10];

sr.Read(Buffer, 0, 10);

string header = ((int)Buffer[0]).ToString("X2") + ((int)Buffer[1]).ToString("X2");

switch (header)
{
  case "FFD8":
    Response.Write("jpeg");
    break;
  case "4949":
    Response.Write("tif");
    break;
  case "424D":
    Response.Write("bmp");
    break;
  case "4749":
    Response.Write("gif");
    break;
  default:
    Response.Write("Not Supported");
    break;
}
arrow
arrow
    全站熱搜

    鴨爸 發表在 痞客邦 留言(0) 人氣()