imageName = imagePath.Substring(imagePath.LastIndexOf("\\") + 1);
string tmp = imageName.Split(''.'')[0];
string hashImageName =tmp.GetHashCode().ToString() + "." + imageType;
//判斷是否指定圖片格式
if ("jpg" == imageType || "JPG" == imageType || "gif" == imageType || "GIF" == imageType || "bmp" == imageType || "BMP" == imageType || "Bmp" == imageType)
{
imageUrl = "~/Images/" + hashImageName;
try
{
//建立虛擬路徑> mPath = Server.MapPath("~/Images");
//保存到虛擬路徑
upImage.PostedFile.SaveAs(mPath + "\\" + hashImageName);
Response.Write("圖片上傳成功!");
}
catch(Exception err)
{
Response.Write(err.Message + ",圖片上傳失敗!");
}
}
else
{
Response.Write("<script language=''Javascript''> alert(''對不起!請您選擇jpg/bmp/gif格式的圖片!'');</script>");
return;
}
}
這一段代碼,對文件格式進行了判斷,如果格式是指定的圖片格式之一,則執行上傳。一般情況下,這段程序沒有問題。但是,當我選擇了圖片之後,卻人為修改了控件文本框中的路徑和文件信息,修改後的文件可能並不存在,此時會發生什麼呢?
我曾以為程序不會正常運行,上傳圖片會失敗。然後實驗的結果卻是顯示了“圖片上傳成功!”。查看服務器上圖片文件夾,發現確實有了指定的文件名,但圖像大小為0字節。這說明這個成功的信息是個假象!(看來有必要去理解SaveAs()的真實原理)。
為了防止原文件不存在,卻能上傳成功的假象出現,在進行上傳之前,有必要對原文件是否存在進行驗證。於是我前面的代碼前加了一個判斷語句:
if (File.Exists(upImage.PostedFile.FileName))
{
}
這樣,就可以得到這樣一個邏輯: