上傳文件的工作正常,但現在我試圖驗證文件擴展名,看起來像FileUpload1
和FileUpload2
之間有一些干擾 。驗證上傳的文件擴展名
FileUpload1
用於上傳.jpg或.png圖片,FileUpload2
用於上傳.pdf文件。
下面是這是對BtnInsert_Click
事件執行的代碼:
protected void BtnInsert_Click(object sender, EventArgs e)
{
string[] validPhotoFile = { ".jpg", ".png" };
string validPDFFile = ".pdf";
string photoExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
string pdfExt = System.IO.Path.GetExtension(FileUpload2.PostedFile.FileName);
bool isValidPhotoFile = false;
bool isValidPDFFile = false;
for (int i = 0; i < validPhotoFile.Length; i++)
{
if (photoExt == "." + validPhotoFile[i])
{
isValidPhotoFile = true;
break;
}
}
for (int i = 0; i < validPDFFile.Length; i++)
{
if (pdfExt == "." + validPDFFile[i])
{
isValidPDFFile = true;
break;
}
}
if (!isValidPhotoFile)
{
PhotoErrorMessage.Text = "Upload .jpg or .png image!";
}
if (!isValidPDFFile)
{
PDFErrorMessage.Text = "Upload .pdf file!";
}
else
{
string photoFilPath = Path.GetFileName(FileUpload1.PostedFile.FileName.ToString());
string pdfFilPath = Path.GetFileName(FileUpload2.PostedFile.FileName.ToString());
string photoPath = Server.MapPath(@"~/PDFCover/" + fotoFilPath);
string pdfPath = Server.MapPath(@"~/PDF/" + pdfFilPath);
FileUpload1.PostedFile.SaveAs(photoPath);
FileUpload2.PostedFile.SaveAs(pdfPath);
SqlCommand cmd = new SqlCommand("INSERT INTO Book(Title,Content...) VALUES ('" + TextBox1.Text
+ "','" + TextBox2.Text + ... + "','" + "~/PDFCover/" + photoFilPath
+ "','" + "~/PDF/" + pdfFilPath + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
現在,即使我選擇上傳它顯示上傳的有效文件標籤錯誤消息的有效文件。
是在同一時間這兩個文件。在這種情況下,圖像和PDF文件。 – user2969489 2014-09-12 11:31:10
擴展不是驗證文件類型的方法。如果我使用「.jpeg」,甚至根本沒有擴展,該怎麼辦?儘管在運行時更加昂貴,但正確的方法是解析文件。事實上,我經常發現需要解析上傳到服務器的圖像文件,以便縮小它們,例如,如果用戶上傳4100萬像素文件以獲取個人資料圖片。 – 2014-09-12 11:31:21
@Kris是不是很貴,因爲JPG,PNG和PDF有自己的文件頭格式,它可以讓你識別8到20字節的文件。 – PTwr 2014-09-12 11:33:56