[笔记] 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 ...
随机推荐
- JDBC连接mysql的url的写法和常见属性
URL=jdbc:mysql://[host][:port]/[database] 其后可以添加性能参数:?[propertyName1=propertyValue1] & [property ...
- Spring Boot 之异步执行方法
前言: 最近的时候遇到一个需求,就是当服务器接到请求并不需要任务执行完成才返回结果,可以立即返回结果,让任务异步的去执行.开始考虑是直接启一个新的线程去执行任务或者把任务提交到一个线程池去执行,这两种 ...
- 1.java容器基本内容
目录 java容器概述 1.collection接口 (1)collection接口方法 (2)set接口实现类 (3)list接口实现类 (4)queue接口实现类 2.map接口 java容器概述 ...
- Shadow broker=>fuzzbunch+metasploit 攻击外网测试以及metasploit大批量扫描目标IP
0x01 前言 4月14日,影子经纪人在steemit.com上公开了一大批NSA(美国国家安全局)“方程式组织” (Equation Group)使用的极具破坏力的黑客工具,其中包括可以远程攻破全球 ...
- 为Dynamics CRM注释的图片附件做个预览功能
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复163或者20151017可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM中注释可 ...
- Asp.Net Core 开发之旅之.net core 连接数据库
数据库连接字符串放入配置文件中 打开appsettings.json 添加ConnectionStrings 例子如下: { "Logging": { "IncludeS ...
- CentOS7打开、关闭防火墙。
CentOS7 以上机器一些命令和低版本CentOS是有些差异的,本文只针对CentOS7 以上版本. CentOS7使用firewalld打开关闭防火墙与端口1.firewalld的基本使用启动: ...
- 4-9 Panadas与sklearn结合实例
1.显示百分比的柱状图 In [1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplo ...
- 有关csp自我反思
首先说说体会把 这次前几个都是模拟,最后一道题以为自己可能会结果是半吊子根本不会,导致浪费了三个小时写第五题只有十分 如果不畏惧字符串而专心的写第三题的话,应该结果会不一样把.希望下次能好好考 第一题 ...
- 有缓存区的管道channel
package main import ( "fmt" "time" ) func main() { //创建一个有缓存区的管道 ch := make(chan ...