有一個頁面,客戶可以上傳txt文件和csv文件,但是不允許上傳其他的文件,就算把一個jpg文件改掉文件名為txt,也要職別出來,然後禁止上傳
我用了三重判斷,關鍵代碼如下
//獲取文件名稱的
Extension
string extension = System.IO.Path.GetExtension(FileUpload1.FileName);
//第一重判斷
,根據Extension判斷
if (extension !=
".txt" && extension !=
".csv")
{
Page.ClientScript.RegisterStartupScript(Page.GetType(),
"noFile", "<script>alert(\"File
Extension is wrong\")</script> ");
return;
}
//第二重判斷,根據
MIME
if (FileUpload1.PostedFile.ContentType !=
"text/plain")
{
Page.ClientScript.RegisterStartupScript(Page.GetType(),
"noFile", "<script>alert(\"File
Extension is wrong\")</script>");
return;
}
try
{
Stream stream = FileUpload1.FileContent;
StreamReader reader =
new StreamReader(stream, System.Text.Encoding.UTF8);
System.IO.BinaryReader binaryReader =
new System.IO.BinaryReader(stream);
byte buffer = binaryReader.ReadByte();
string fileclass = buffer.ToString();
buffer = binaryReader.ReadByte();
fileclass += buffer.ToString();
//第三重判斷
:專門針對csv判斷,
等于 117115
说明
是csv类型(txt文件沒有文件頭,無法判斷,所以此處只判斷 csv)
if (fileclass !=
"117115" && extension ==
".csv")
{
Page.ClientScript.RegisterStartupScript(Page.GetType(),
"noFile", "<script>alert(\"File
Extension is wrong\")</script>");
return;
}
}
現在我頭痛的問題是,我把一個.jpg圖片文件的擴展後綴改為.txt,服務器就被騙過去了。用ContentType 也識別不出來,也被騙了
要怎麼做才能讓頁面不被騙過去呢?