如何检查文件格式
本文关键字:文件 格式 检查 何检查 | 更新日期: 2023-09-27 18:35:33
允许的文件格式仅为PDF文件,如何在继续更新数据库之前检查文件格式并显示错误消息,如果上传的文件不是PDF。以下代码始终显示无法识别文件,即使文件是 PDF 并且数据库未更新。
string filePath = FileUpload1.PostedFile.FileName;
string filename = Path.GetFileName(filePath);
string ext = Path.GetExtension(filename);
string contenttype = String.Empty;
switch (ext)
{
case ".pdf":
contenttype = "application/pdf";
break;
default:
System.Console.WriteLine("File format not recognised. Only PDF format allowed");
break;
}
if (contenttype != String.Empty)
{
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
string classNmae = ddClass.Text.Split('~')[0] + ddClass.Text.Split('1');
com.Parameters.Clear();
com.CommandText = "UPDATE [Marking] SET [fileName]=@fileName, [fileType]=@fileType, [type]=@typ,[submissionDate]=@sd, [filePath]=@fp where [class_id]=@cid AND [module_id]=@mid AND [student_id]= '" +Session["id"].ToString() + "'";
com.Parameters.Add("@cid", SqlDbType.VarChar).Value = ddClass.Text.Split('~')[0];
com.Parameters.Add("@mid", SqlDbType.VarChar).Value = ddClass.Text.Split('~')[1];
com.Parameters.Add("@fileName", SqlDbType.VarChar).Value = filename;
com.Parameters.Add("@fileType", SqlDbType.VarChar).Value = "application/pdf";
com.Parameters.Add("@typ", SqlDbType.VarChar).Value = txtType.Text;
com.Parameters.Add("@sd", SqlDbType.VarChar).Value = DateTime.Now;
com.Parameters.Add("@fp", SqlDbType.Binary).Value = bytes;
com.ExecuteNonQuery();
}
else
{
lb.Text = "File format not recognised." +
" Upload Word formats";
}
试试这个:
if (FileUpload1.HasFile)
{
HttpPostedFile myPostedFile = FileUpload1.PostedFile;
FileInfo finfo = new FileInfo(myPostedFile.FileName);
if (finfo.Extension.Equals(".pdf", StringComparison.InvariantCultureIgnoreCase) && IsPdf(finfo.FullName))
{
//do the operation
}
}
public bool IsPdf(string sourceFilePath)
{
var bytes = System.IO.File.ReadAllBytes(sourceFilePath);
var match = System.Text.Encoding.UTF8.GetBytes("%PDF-");
return match.SequenceEqual(bytes.Take(match.Length));
}
根据@Darek和@Andrew的建议进行了更新。
以下是确定文件是否至少具有PDF标题的一种方法:
var bytes = File.ReadAllBytes(someFileNameHere);
var match = Encoding.UTF8.GetBytes("%PDF-");
var isPDF = match.SequenceEqual(bytes.Take(match.Length));