MIME Type 为何物:

MIME 参考手册

svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

常规方式

对于有文件后缀名的,可以使用 MimeMapping.GetMimeMapping 获取。

MimeMapping.GetMimeMapping(String) Method (System.Web) | Microsoft Docs

如果 MimeMapping.GetMimeMapping 不认识的,会返回 application/octet-stream 这个默认值。

其它方式

对于特定的类型的文件,可以使用与之相关的其它方式获取,如 Image ,可以这样获取:

public bool TryBuildFileMimeType(string filePath, out string mimeType)
{
if (string.IsNullOrWhiteSpace(filePath) || !System.IO.File.Exists(filePath))
{
mimeType = string.Empty;
return false;
}
try
{
var image = Image.FromFile(filePath);
mimeType = GetMimeTypeFromImage(image);
return !string.IsNullOrWhiteSpace(mimeType);
}
catch (Exception ex)
{
mimeType = string.Empty;
return false;
}
} private string GetMimeTypeFromImage(Image image)
{
if (image.RawFormat.Equals(ImageFormat.Jpeg))
return "image/jpeg";
else if (image.RawFormat.Equals(ImageFormat.Bmp))
return "image/bmp";
else if (image.RawFormat.Equals(ImageFormat.Emf))
return "image/emf";
else if (image.RawFormat.Equals(ImageFormat.Exif))
return "image/exif";
else if (image.RawFormat.Equals(ImageFormat.Gif))
return "image/gif";
else if (image.RawFormat.Equals(ImageFormat.Icon))
return "image/icon";
else if (image.RawFormat.Equals(ImageFormat.Png))
return "image/png";
else if (image.RawFormat.Equals(ImageFormat.Tiff))
return "image/tiff";
else if (image.RawFormat.Equals(ImageFormat.Wmf))
return "image/wmf";
return string.Empty;
}

在我这里的实际场景中,大部分文件都有后缀名,即可以用 MimeMapping 处理,对于没有后缀名的,都是图片文件,可以用后面这种方式处理。

当然,还可以根据文件头内容,先获取文件类型,在找到对应的 MIME Type 。但这个需要自己维护一个文件头标识的表,不知道有没有现成的 NUGET 可以用,求推荐。

相关工具

5 Tools To Help Identify Unrecognized or Unknown File Types • Raymond.CC

ExifTool 这个工具很强大,可以看很多文件元数据信息,有命令行版本和GUI版本。

ExifTool by Phil Harvey

ExifToolGUI

其它

看到 How can I determine file type without an extension on Windows? - Super User

有个疑问,根据文件内容获取文件的类型/MIME type,本质上是不靠谱的?只能靠猜?只是对大部分常见文件类型,有固定格式而已?

毕竟文件内容是什么,开发者是可以任意控制的。

参考链接或相关链接:

原文链接:

https://www.cnblogs.com/jasongrass/p/11635454.html

[笔记] C# 如何获取文件的 MIME Type的更多相关文章

  1. .NET获取文件的MIME类型(Content Type)

    第一种:这种获取MIME类型(Content Type)的方法需要在.NET 4.5之后才能够支持,但是非常简单. 优点:方便快捷 缺点:只能在.NET 4.5之后使用 public FileResu ...

  2. C# 获取文件的MIME类型

    在C#中获取文件的MIME类型(Content Type)的方法如下 一.使用MimeMapping类 在System.Web程序集中,当前为静态类,就一个获取 // // 摘要: // 映射文档扩展 ...

  3. Java怎样获取Content-Type的文件类型Mime Type

    在Http请求中.有时须要知道Content-Type类型,尤其是上传文件时.更为重要.尽管有些办法可以解决,但都不太准确或者繁琐,索性我发现一个开源的类库可以解决相对完美的解决问题,它就是jMime ...

  4. php获取文件mime类型Fileinfo等方法

    前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaW ...

  5. 【Android Developers Training】 39. 获取文件信息

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. css文件的MIME错误引发的Jquery Mobile绘制错误

    静态文件serve设置的MIME不对,引起的浏览器警告 Resource interpreted as Stylesheet but transferred with MIME type applic ...

  7. c++ 获取文件图标,类型名称,属性 SHGetFileInfo

    SHGetFileInfo是一个相当实用的Windows API函数. // [MoreWindows工作笔记4] 获取文件图标,类型名称,属性 SHGetFileInfo #include < ...

  8. MIME Type

    一.首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash --那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME ...

  9. 什么是 MIME TYPE?

    文章来源: http://baike.baidu.com/item/MIME https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_H ...

随机推荐

  1. MySQL通过SHOW TABLE STATUS查看库中所有表的具体信息

    有时候我们想看下指定库下所有表的使用情况,比如,查询表的Table大小,什么时候创建的,数据最近被更新的时间(即最近一笔insert/update/delete的时间).这些信息对我们进行库表维护很有 ...

  2. windows linux 通过SSH X11Forwrding 使用图形化界面

    有时候,我们需要在命令行中使用远程的GUI程序,这样我们就需要x11转发的来进行访问: Linux平台下不需要特别的配置,假如我们要远程的机器是centos机器,只要做如下配置即可: #vi /etc ...

  3. Linux—网络防火墙详解

    一.防火墙基本知识 二.firewall防火墙 # 安装firewalld [root@localhost ~]# apt-get install firewalld [root@localhost ...

  4. Shell命令-系统信息及显示之df、top

    文件及内容处理 - df.top 1. df:报告文件系统磁盘空间的使用情况 df命令的功能说明 df 命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. df命令的语法格式 df [O ...

  5. Rust多线程中的消息传递机制

    代码说话. use std::thread; use std::sync::mpsc; use std::time::Duration; fn main() { let (tx, rx) = mpsc ...

  6. conda基础命令

    1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)conda list 查看安装了哪些包. 2)con ...

  7. php安全字段和防止XSS跨站脚本攻击过滤函数

    function escape($string) { global $_POST; $search = array ( '/</i', '/>/i', '/\">/i', ...

  8. 基于 lstm 的股票收盘价预测 -- python

    开始导入 MinMaxScaler 时会报错 “from . import _arpack ImportError: DLL load failed: 找不到指定的程序.” (把sklearn更新下) ...

  9. 【Eureka篇三】Eureka常用配置说明(7)

    服务注册中心配置(Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean) #关闭注册中心的保护机制, ...

  10. jwt, token, session和cookies

    jwt token,session和cookies