[笔记] C# 如何获取文件的 MIME Type
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,本质上是不靠谱的?只能靠猜?只是对大部分常见文件类型,有固定格式而已?
毕竟文件内容是什么,开发者是可以任意控制的。
参考链接或相关链接:
- c# - Get ImageFormat from System.Drawing.Image.RawFormat - Stack Overflow
- c# - Guessing a file type based on its content - Code Review Stack Exchange
- .NET获取文件的MIME类型(Content Type)
- Get a File Content-Type / MIME-type from file extension in ASP.NET C#
- NuGet Gallery | MimeMapping 1.0.1.17
原文链接:
https://www.cnblogs.com/jasongrass/p/11635454.html
[笔记] C# 如何获取文件的 MIME Type的更多相关文章
- .NET获取文件的MIME类型(Content Type)
第一种:这种获取MIME类型(Content Type)的方法需要在.NET 4.5之后才能够支持,但是非常简单. 优点:方便快捷 缺点:只能在.NET 4.5之后使用 public FileResu ...
- C# 获取文件的MIME类型
在C#中获取文件的MIME类型(Content Type)的方法如下 一.使用MimeMapping类 在System.Web程序集中,当前为静态类,就一个获取 // // 摘要: // 映射文档扩展 ...
- Java怎样获取Content-Type的文件类型Mime Type
在Http请求中.有时须要知道Content-Type类型,尤其是上传文件时.更为重要.尽管有些办法可以解决,但都不太准确或者繁琐,索性我发现一个开源的类库可以解决相对完美的解决问题,它就是jMime ...
- php获取文件mime类型Fileinfo等方法
前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaW ...
- 【Android Developers Training】 39. 获取文件信息
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- css文件的MIME错误引发的Jquery Mobile绘制错误
静态文件serve设置的MIME不对,引起的浏览器警告 Resource interpreted as Stylesheet but transferred with MIME type applic ...
- c++ 获取文件图标,类型名称,属性 SHGetFileInfo
SHGetFileInfo是一个相当实用的Windows API函数. // [MoreWindows工作笔记4] 获取文件图标,类型名称,属性 SHGetFileInfo #include < ...
- MIME Type
一.首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash --那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME ...
- 什么是 MIME TYPE?
文章来源: http://baike.baidu.com/item/MIME https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_H ...
随机推荐
- python-execjs(调用js)
一.安装 pip3 install PyExecJS 电脑上要有nodejs环境 二.使用 一.获取js字符串 首先将js保存至于本地文件或者你可以可以直接读到内存,必须让js以字符串的形式展示 注意 ...
- element-admin中echarts图标宽度无法修改
默认示例 <template> <div> <el-row :gutter="0"> <el-col :xs="24" ...
- PHP面试题2019年京东工程师面试题及答案解析
一.单选题(共28题,每题5分) 1.Apache与Nginx大访问下性能描述正确的是? A.Apache所采用的epoll网络I/O模型非常高效 B.Nginx使用了最新的kqueue和select ...
- C++ 运算符重载的基本概念
01 运算符重载的需求 C++ 预定义的运算符,只能用于基本数据类型的运算:整型.实型.字符型.逻辑型等等,且不能用于对象的运算.但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符 ...
- DesignPattern系列__08UML相关知识
前言 现在,很少有人和90年代一样,自己去实现一个软件的各个方面,也就是说,在工作中,和人沟通是必备的技能.那么,作为一枚码农,如何和他人沟通呢?这就要依靠本文的主题了--UML. 简介 UML--U ...
- 高强度学习训练第八天总结:MySQL的一些优化
为什么要做MYSQL优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库中的数据会越来越多,处理时间会相应变慢. 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计 ...
- 高强度学习训练第五天总结:JAVA对象+GC
第五天了.. 理清了Java对象的创建过程,分配内存,线程安全性,对象头和对象的访问定位 理清了JVM GC的发展历史,算法,例如: 可达性分析 引用计数法 标记-清楚法 复制算法 标记-整理算法 分 ...
- Typescript基础(1)——数据类型
前言 这是开始学习Typescript的一些笔记,涉及的都是很基础的知识点.大神们请绕路或者欢迎指点.今天开始第一部分数据类型的学习. 数据类型 Typescript中为了使代码编写更加规范,更加易于 ...
- LFI (local file inclusion vulnerability)本地文件包含
代码实例: <?php $file = $_GET['file']; if(isset($file)) { include("pages/$file"); } else { ...
- spark的wordcount
在开发环境下实现第一个程序wordcount 1.下载和配置scala,注意不要下载2.13,在spark-core明确支持scala2.13前,使用2.12或者2.11比较好. https://ww ...