上传文件的工作正常,但现在我试图验证文件扩展名,看起来像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