C# 判断文件格式的一些总结
前提概述:
项目中 经常会有上传图片的地方 有的时候需要对图片类型做一些要求 这个时候就需要一些判断 虽然前段上传的时候可以去做类型的限制 或者后台接受的时候从file的type 中获取图片类型 但是这仅仅是表面的验证 这都是基于文件的后缀名称做的验证 但是需要验证真真的原生图片类型 需要去读取文件的二进制 从文件的表头信息做一些判断 为什么要这么麻烦呢~ 原因是因为 由于之前项目使用的是System.Drawing.Image 这个类库去加载文件流 从而去获取图片格式 然后去判断 但是由于在搬迁代码的时候 站点使用的是net core 2.1 本地运行是没问题 有这个类库 但是上了预发以后由于运行环境确少类库 一直在报错 就没法使用了
所以今天刚好组内讨论到这个事情 上午就自己整理下 希望后期能用到 和大家做下分享
代码如下:
public class ImageValidate
{
public static (bool, ImageType) ImageValidateByStream(Stream fileStream)
{
string imageType = string.Empty;
using (BinaryReader br = new BinaryReader(fileStream))
{
int length = ;
StringBuilder stringBuilder = new StringBuilder();
while (length > )
{
byte tempByte = br.ReadByte();
stringBuilder.Append(Convert.ToString(tempByte, ));
stringBuilder.Append(",");
length--;
}
string fileTypeString = stringBuilder.ToString().ToUpper();
if (string.IsNullOrEmpty(fileTypeString))
return (false, ImageType.Error); if (fileTypeString.StartsWith("FF,D8,"))
return (true, ImageType.JPEG);
if (fileTypeString.StartsWith("89,50,4E,47,D,A,1A,A,"))
return (true, ImageType.PNG);
if (fileTypeString.StartsWith("42,4D,"))
return (true, ImageType.JPEG);
if (fileTypeString.StartsWith("47,49,46,38,39,61,") || fileTypeString.StartsWith("47,49,46,38,37,61,"))
return (true, ImageType.GIF);
if (fileTypeString.StartsWith("4D,4D") || fileTypeString.StartsWith("49,49"))
return (true, ImageType.TIFF);
if (fileTypeString.StartsWith("46,4F,52,4D"))
return (true, ImageType.TIFF);
return (false, ImageType.Empty);
}
} public enum ImageType
{
Error,
Empty,
JPEG,
BMP,
PNG,
GIF,
TIFF,
IFF
}
}
为什么只读取部分长度呢 因为 加载所有的 没必要 也浪费内存
C# 判断文件格式的一些总结的更多相关文章
- js判断文件格式及大小
//判断照片大小 function getPhotoSize(obj){ photoExt=obj.value.substr(obj.value.lastIndexOf(".&q ...
- ASP.NET通过byte正确安全的判断上传文件格式
本文介绍一种更安全的方式上传图片,他能有效的防止一些通过修改文件后缀或MIME来伪造的图片的上传,从而保证服务器的安全,希望对大家有所帮助. ASP.NET中在判断文件格式时,我们以前常用的方法就是通 ...
- 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?
今天群里有人聊图片上传,简单说下自己的经验(大牛勿喷) 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那 ...
- C#判断文件及文件夹是否存在并创建(C#判断文件夹存在)
protected void Button1_Click(object sender, EventArgs e) { if (Directory.Exists(Server.MapPath(" ...
- C#根据文件流判断文件类型
判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...
- C#判断文件和文件夹是否存在 不存在则创建
using System.IO;string path = @"D:\accountDaoRu\"; if (Directory.Exists(path) == fa ...
- C#取得控制台应用程序的根目录方法 判断文件夹是否存在,不存在就创建
取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.CurrentDomain.BaseDirect ...
- [开发笔记]-C#判断文件类型
判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...
- flash从数据流判断图片格式防止xss攻击
前段时间测试人员报了一个flash的xss bug,经分析用了Loader.loadBytes且没做数据流格式校验的程序都会中招,自测方法只需一行代码: ExternalInterface.call( ...
随机推荐
- 【Java】FlowControl 流程控制
FlowControl 流程控制 什么是流程控制? 控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述.子程序)运行或求值的顺序. 不论是在声明式编程语言或是函数 ...
- GeiGebra指令
- stand up meeting 12/25/2015 & weekend 12/26/2015~12/27/2015
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 在pdf阅读页面添加生词本显示:UI美化 6 完善显示 ...
- Flask接口开发过程中的心得2019.10.03
完善了一下慕课网实战中的post接口开发,得到了一些进步: 代码如下: #coding=utf-8 from flask import Flask from flask import request ...
- CSRF(跨站请求伪造)学习总结
前言 参考大佬的文章,附上地址 https://www.freebuf.com/articles/web/118352.html 什么是CSRF? CSRF,中文名字,跨站请求伪造,听起来是不是和XS ...
- 这份Mybatis总结,我觉得你很需要!
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Mybatis应该是国内用得最多的「数据访问层」 ...
- UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte sequence
pycharm报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte seq ...
- 还学的动吗? 盘点下Vue.js 3.0.0 那些让人激动的功能
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/vuejs-3-0-0-beta-features- ...
- Cannot find libcrypto in Ubuntu
https://stackoverflow.com/questions/13811889/cannot-find-libcrypto-in-ubuntu sudo apt-get install li ...
- Python 基础教程(第二版)笔记 (1)
P22 除非对 input 有特别的需要,否则应该尽可能使用 raw_input 函数. 长字符串,跨多行,用三个引号代替普通引号.并且不需要使用反斜线进行转义. P23 原始字符串 print r' ...