第一种也是我首推的,
这咱方式的原理是将传过来的文件转成图片格式,看是否能正常转换,如果能正常转说明是图片,如果不能那肯定也不会是图片,方法如下
[C#] 纯文本查看 复制代码 /// 判断文件是否为图片
/// </summary>
/// <param name="path">文件的完整路径</param>
/// <returns>返回结果</returns>
public Boolean IsImage(string path)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
return true;
}
catch (Exception ex)
{
return false;
}
}
当然你也可以使用流的方法来验证这种最适合上传中检查,上一个主要是用于上传后的检测
[C#] 纯文本查看 复制代码 /// 判断文件是否为图片
/// </summary>
/// <param name="stream">文件的流</param>
/// <returns>返回结果</returns>
public Boolean IsImage(Stream stream)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromStream(stream);
return true;
}
catch (Exception)
{
return false;
}
}
当然网上肯定也有说第三种,比如
[C#] 纯文本查看 复制代码 /// 根据文件头判断上传的文件类型
/// </summary>
/// <param name="filePath">filePath是文件的完整路径 </param>
/// <returns>返回true或false</returns>
private bool IsPicture(string filePath)
{
try
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
string fileClass;
byte buffer;
buffer = reader.ReadByte();
fileClass = buffer.ToString();
buffer = reader.ReadByte();
fileClass += buffer.ToString();
reader.Close();
fs.Close();
if (fileClass == "255216" || fileClass == "7173" || fileClass == "13780" || fileClass == "6677")
//255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
这种说白了,就是虎一下小黑客,根本是治标不治本
|