c# 根据文件流查看文件真实格式

今天在做图片注册的功能的时候,测试提出一个问题:将随便一个非图片文件将后缀名改为jpg或其他,上传时应检验图片合法性。然后同事给提供了根据文件流前两个字节判断文件真实格式的思路,代码如下:

  public static FileExtension CheckFileType(string fileName)
        {
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
            string fileType = string.Empty; ;
            try
            {
                byte data = br.ReadByte();
                fileType += data.ToString();
                data = br.ReadByte();
                fileType += data.ToString();
                FileExtension extension;
                try
                {
                    extension = (FileExtension)Enum.Parse(typeof(FileExtension), fileType);
                }
                catch
                {
                    extension = FileExtension.VALIDFILE;
                }
                return extension;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                    br.Close();
                }
            }
        }

然后从网上找了各种文件所对应的字节关系如下:

  public enum FileExtension
    {
        JPG = 255216,
        GIF = 7173,
        BMP = 6677,
        PNG = 13780,
        COM = 7790,
        EXE = 7790,
        DLL = 7790,
        RAR = 8297,
        ZIP = 8075,
        XML = 6063,
        HTML = 6033,
        ASPX = 239187,
        CS = 117115,
        JS = 119105,
        TXT = 210187,
        SQL = 255254,
        BAT = 64101,
        BTSEED = 10056,
        RDP = 255254,
        PSD = 5666,
        PDF = 3780,
        CHM = 7384,
        LOG = 70105,
        REG = 8269,
        HLP = 6395,
        DOC = 208207,
        XLS = 208207,
        DOCX = 208207,
        XLSX = 208207,
        VALIDFILE = 9999999
    }

进行测试了一下,图片格式都OK。

但是此方法不可以用于判断视频格式,不知走过路过的有木有较好的解决方案。

时间: 2024-10-07 22:14:11

c# 根据文件流查看文件真实格式的相关文章

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

1 //我的会员中心 头像上传接口 2 /*windows 调试*/ 3 @Value("${appImg.location}") 4 private String winPathPic; 5 /*linux 使用*/ 6 @Value("${img.location}") 7 private String linuxPathPic; 8 9 @PostMapping(value = "/file") 10 public String file(

Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)

ADB很强大,记住一些ADB命令有助于提高工作效率. 1. 获取序列号: adb get-serialno 2. 查看连接计算机的设备: adb devices 3. 重启机器: adb reboot 4. 重启到bootloader,即刷机模式: adb reboot bootloader 5. 重启到recovery,即恢复模式: adb reboot recovery 6. 查看log: adb logcat 7. 终止adb服务进程: adb kill-server 8. 重启adb服务

第十四周阅读程序2:运用文件流进行文件的复制

问题及代码: #include <iostream> #include <fstream> using namespace std; int main() { ifstream readFile; //定义文件流类 ofstream writeFile; char ch; readFile.open("a.txt", ios::in); //以输入方式打开文件 a.txt writeFile.open("b.txt", ios::out);

使用文件流下载文件,并且修改文件的名字

最近在搞一个项目,里面有一个文件下载的内容,但是万恶的产品提了一个要自定义修改文件名的需求,一开始后台不想改,让前端修改(这简直是不可理喻,最后还是后台改了),不过经过努力,我还是找到了方法去解决. 这里使用的是文件流的方式,就是先把文件从服务器下载下来,前端再通过blob去修改文件名. 代码如下: fetch('/api/fs/download2/internal/' + item.att[0].url).then(res => res.blob().then(blob => { let a

C#根据文件流判断文件类型

判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static bool IsAllowedExtension(string filePa

objective-c 遍历文件夹查看文件

////  main.m//  FileSearchTest////  Created by Zhang Leonardo on 11-10-31.//  Copyright (c) 2011年 __MyCompanyName__. All rights reserved. //  To discuss via :www.renren.com/leonardozhang // #import <Foundation/Foundation.h> int main (int argc, const

java根据文件流判断文件类型(后缀名)

import java.io.FileInputStream; public class FileType{ public static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) {

Unity中删除文件目录下的所有文件和查看文件里面的内容

这个脚本中存储了: 删除文件夹中所有的文件的方法, 删除单个文件的方法 获取文本内容的方法 获取其他类型文本内容的方法 写入文本文件的方法 void Start () { string filePath = Application.streamingAssetsPath + "/" + "abb.txt"; #region 进行文件的删除 //string fullPath = Application.streamingAssetsPath; //bool isTr