博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET中检测图片真实否防范病毒上传
阅读量:5155 次
发布时间:2019-06-13

本文共 5191 字,大约阅读时间需要 17 分钟。

  主要是用来判断客户端上传的图片是否为真实的图片,以防病毒侵入,保证上传的文件的安全。

 
   主要代码如下:
 
   需要引用
 
   [csharp]
 
   using System.IO;
 
   using System.IO;
 
   [csharp]
 
   public void UploadFile()
 
   {
 
   try
 
   {
 
   HttpPostedFile postfile = Request.Files["file"];
 
   string savepath = Server.MapPath("Image/" + postfile.FileName);
 
   postfile.SaveAs(savepath);
 
   FileStream fs = new FileStream(savepath, FileMode.Open, FileAccess.Read);
 
   BinaryReader reader = new BinaryReader(fs);
 
   string fileClass;
 
   byte buffer;
 
   byte[] b = new byte[2];
 
   buffer = reader.ReadByte();
 
   b[0] = buffer;
 
   fileClass = buffer.ToString();
 
   buffer = reader.ReadByte();
 
   b[1] = buffer;
 
   fileClass += buffer.ToString();
 
   reader.Close();
 
   fs.Close();
 
   if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780")
 
   {
 
   //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
 
   //Response.Write("图片可用");
 
   //保存到数据库中
 
   }
 
   else
 
   {
 
   //Response.Write("图片非法");
 
   File.Delete(savepath); //删除文件
 
   return;
 
   }
 
   }
 
   catch (Exception)
 
   { //Response.Write("图片非法!");
 
   return;
 
   throw;
 
   }
 
   }
 
   public void UploadFile()
 
   {
 
   try
 
   {
 
   HttpPostedFile postfile = Request.Files["file"];
 
   string savepath = Server.MapPath("Image/" + postfile.FileName);
 
   postfile.SaveAs(savepath);
 
   FileStream fs = new FileStream(savepath, FileMode.Open, FileAccess.Read);
 
   BinaryReader reader = new BinaryReader(fs);
 
   string fileClass;
 
   byte buffer;
 
   byte[] b = new byte[2];
 
   buffer = reader.ReadByte();
 
   b[0] = buffer;
 
   fileClass = buffer.ToString();
 
   buffer = reader.ReadByte();
 
   b[1] = buffer;
 
   fileClass += buffer.ToString();
 
   reader.Close();
 
   fs.Close();
 
   if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780")
 
   {
 
   //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
 
   //Response.Write("图片可用");
 
   //保存到数据库中
 
   }
 
   else
 
   {
 
   //Response.Write("图片非法");
 
   File.Delete(savepath); //删除文件
 
   return;
 
   }
 
   }
 
   catch (Exception)
 
   { //Response.Write("图片非法!");
 
   return;
 
   throw;
 
   }
 
   }
 
   MVC 中的代码如下,在这里我返回的JSON格式,当然可以返回Content或其他:
 
   [csharp]
 
   /// <summary>
 
   /// 上传头像
 
   /// </summary>
 
   /// <param name="userId">用户编号</param>
 
   /// <returns>Json(-1表示系统异常,-2表示文件不合法)</returns>
 
   [HttpPost]
 
   public JsonResult UploadAvatar(string userId)
 
   {
 
   //上传头像
 
   string folderPath = "/upload/avatar/";
 
   //判断路径是否存在
 
   if (!Directory.Exists(folderPath))
 
   Directory.CreateDirectory(folderPath);//创建文件路径
 
   HttpPostedFileBase uploadFile = Request.Files["avatars"];
 
   if (uploadFile != null)
 
   {
 
   string oriFileName = uploadFile.FileName;//原始文件名
 
   string fileName = userId + "_" + oriFileName;
 
   uploadFile.SaveAs(Server.MapPath(folderPath + fileName));
 
   FileStream fs = new FileStream(Server.MapPath(folderPath + fileName), FileMode.Open, FileAccess.Read);
 
   BinaryReader reader = new BinaryReader(fs);
 
   string fileClass;
 
   byte buffer;
 
   byte[] b = new byte[2];
 
   buffer = reader.ReadByte();
 
   b[0] = buffer;
 
   fileClass = buffer.ToString();
 
   buffer = reader.ReadByte();
 
   b[1] = buffer;
 
   fileClass += buffer.ToString();
 
   reader.Close();
 
   fs.Close();
 
   if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780")
 
   {
 
   //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
 
   //Response.Write("图片可用");
 
   //保存到数据库中
 
   }
 
   else
 
   {
 
   //Response.Write("图片非法");
 
   FileInfo f = new FileInfo(Server.MapPath(folderPath + fileName));
 
   f.Delete(); //删除文件
 
   return Json(-2, JsonRequestBehavior.AllowGet);
 
   }
 
   return Json(Server.HtmlEncode(folderPath + fileName), JsonRequestBehavior.AllowGet);
 
   }
 
   return Json(-1, JsonRequestBehavior.AllowGet);
 
   }
 
   /// <summary>
 
   /// 上传头像
 
   /// </summary>
 
   /// <param name="userId">用户编号</param>
 
   /// <returns>Json(-1表示系统异常,-2表示文件不合法)</returns>
 
   [HttpPost]
 
   public JsonResult UploadAvatar(string userId)
 
   {
 
   //上传头像
 
   string folderPath = "/upload/avatar/";
 
   //判断路径是否存在
 
   if (!Directory.Exists(folderPath))
 
   Directory.CreateDirectory(folderPath);//创建文件路径
 
   HttpPostedFileBase uploadFile = Request.Files["avatars"];
 
   if (uploadFile != null)
 
   {
 
   string oriFileName = uploadFile.FileName;//原始文件名
 
   string fileName = userId + "_" + oriFileName;
 
   uploadFile.SaveAs(Server.MapPath(folderPath + fileName));
 
   FileStream fs = new FileStream(Server.MapPath(folderPath + fileName), FileMode.Open, FileAccess.Read);
 
   BinaryReader reader = new BinaryReader(fs);
 
   string fileClass;
 
   byte buffer;
 
   byte[] b = new byte[2];
 
   buffer = reader.ReadByte();
 
   b[0] = buffer;
 
   fileClass = buffer.ToString();
 
   buffer = reader.ReadByte();
 
   b[1] = buffer;
 
   fileClass += buffer.ToString();
 
   reader.Close();
 
   fs.Close();
 
   if (fileClass == "255216" || fileClass == "7173" || fileClass == "6677" || fileClass == "13780")
 
   {
 
   //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
 
   //Response.Write("图片可用");
 
   //保存到数据库中
 
   }
 
   else
 
   {
 
   //Response.Write("图片非法");
 
   FileInfo f = new FileInfo(Server.MapPath(folderPath + fileName));
 
   f.Delete(); //删除文件
 
   return Json(-2, JsonRequestBehavior.AllowGet);
 
   }
 
   return Json(Server.HtmlEncode(folderPath + fileName), JsonRequestBehavior.AllowGet);
 
   }
 
   return Json(-1, JsonRequestBehavior.AllowGet);
 
   }
 

转载于:https://www.cnblogs.com/haosola/archive/2013/04/18/3029772.html

你可能感兴趣的文章
[BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
查看>>
尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
查看>>
android之Handler Runnable实现倒计时
查看>>
putty修改编码
查看>>
安全版字符串操作函数
查看>>
数据库msqlserver的几种类型及解决MSSQLServer服务启动不了的问题
查看>>
CSS轮廓 边距 填充 分组和嵌套
查看>>
JAVA多线程--线程阻塞与唤醒
查看>>
JavaSE语法基础总结
查看>>
python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
查看>>
线性表9 - 数据结构和算法14
查看>>
循环移位
查看>>
Spring mvc4 + ActiveMQ 整合
查看>>
Python基础(8)素数输出
查看>>
POS Tagging 标签类型查询表(Penn Treebank Project)
查看>>
Cookie/Session机制详解
查看>>
搭建Docker环境---Docker概述
查看>>
UVa 11383 少林决胜(二分图最佳完美匹配)
查看>>
NSAttributedString
查看>>
Java复习之网络编程
查看>>