高级判断文件类型

转载 2011年01月19日 16:32:00

平时在上传文件文件时,只允许上传jpg,gif,png等后缀的图片文件,这个可以根据文件后缀名来过滤。但是如果用户修改了后缀名来欺骗系统的话又该怎么解决?比如a.txt格式的改成a.jpg,我现在的程序就无法识别了,虽然在后台可以弹出错误,但这个错误已经不是FS上定义的错误了。

解决:

在网上查了好多资料,大部分都是通过将文件读成二进制流,取前两个字节判断,比如.jpg的是255216.代码如下:

 

经过测试,可以很好的判断.jpg、.gif格式的文件.

然而对于.txt文件却不是102100,每个.txt返回的值也不一样,把给定的那个文件看作是无类型的二进制文件,然后顺序地读出这个文件的每一个字节,如果文件里有一个字节的值等于0,那么这个文件就不是文本文件;反之,如果这个文件中没有一个字节的值是0的话,就可以判定这个文件是文本文件了,修改:

 

        /// <summary>
       
/// Checks the file is textfile or not.
       
/// </summary>
       
/// <param name="fileName">Name of the file.</param>
       
/// <returns></returns>
        public static bool CheckIsTextFile(string fileName)
        {
            FileStream fs
= new FileStream(fileName, FileMode.Open, FileAccess.Read);
           
bool isTextFile=true;
           
try
            {
               
int i = 0;
               
int length = (int)fs.Length;
               
byte data;
               
while (i < length && isTextFile)
                {
                    data
= (byte)fs.ReadByte();
                    isTextFile
= (data != 0);
                    i
++;
                }
               
return isTextFile;
            }
           
catch (Exception ex)
            {
               
throw ex;
            }
           
finally
            {
               
if (fs != null)
                {
                    fs.Close();
                }
            }
        }

 

原文:http://www.cnblogs.com/gzlxm/archive/2010/05/25/1743296.html

Python入门:文件类型判断

由原文引发的一场思考: (http://blog.sina.com.cn/s/blog_52ddfea30102wah6.html) 由于原文blog对代码支持的不是很好,所以不能有效的反映代码结...
  • foryouslgme
  • foryouslgme
  • 2016年06月12日 18:35
  • 1846

Java判断文件类型

通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等。 2. 通过读取文件,获取文件的Content...
  • asas5250
  • asas5250
  • 2016年08月11日 19:10
  • 920

jQuery判断文件类型与文件大小

判断文件类型原理就是字符串的找索引:截取上传文件的文件名的后缀,判断上传文件的后缀是否在允许上传的后缀范围之内。 var file=$("input[name='txt']"); for(var ...
  • z15036826300z
  • z15036826300z
  • 2016年12月03日 11:15
  • 1108

PHP文件类型判断

1、pahtinfo 2、$_FILES 3、php Fileinfo 获取文件MIME类型(finfo_open) 4、读取文件头六个字节作为判断...
  • qq_21386275
  • qq_21386275
  • 2017年04月10日 18:43
  • 2210

获取 文件 后缀 c++

正常情况下可以通过SHGetFileInfoA 或 PathFindExtension 获取文件的类型,当文件无后缀时就需要想别的方法了。         以下以DOC和DOCX文件类型为例子:  ...
  • glc22
  • glc22
  • 2018年01月30日 16:40
  • 38

Linux下如何判断文件类型

在Linux下总共有7种文件类型,分别为: 普通文件(-) 目录文件(d), 软链接文件(l)=快捷方式, 块设备文件,二进制文件(b)   字符设备文件(c) 套接字文件(s) 管道文件(p) 其中...
  • u010682362
  • u010682362
  • 2014年12月22日 21:29
  • 4620

Linux C 判断文件类型

int main(int argc,char *argv[]){ int i; struct stat buf; char *ptr; if(lstat(argv[1],&buf)
  • feizhijiang
  • feizhijiang
  • 2013年08月29日 15:29
  • 2321

Shell脚本:判断当前目录下所有的文件类型

问题描述: 如果是目录显示目录名,如果是文件查看文件内容,如果不是,显示提示信息 shell脚本如下: 执行方式及结果:...
  • zhuanger3517
  • zhuanger3517
  • 2015年11月18日 17:59
  • 1100

python判断文件类型

###   # 文章:Python通过文件头来判断文件类型   # 作者:http://aminby.net   ###      import struct      # 支持文件类型...
  • cdnight
  • cdnight
  • 2015年11月17日 11:32
  • 4057

nodejs文件上传类型判断

判断上传文件类型
  • feinifi
  • feinifi
  • 2017年07月03日 18:02
  • 1056
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高级判断文件类型
举报原因:
原因补充:

(最多只允许输入30个字)