如何从文件扩展名中获得MIME类型?
当前回答
使用MimeTypeMap包,它提供了文件扩展名到mime类型以及mime类型到文件扩展名的巨大双向映射
使用mimetype;
获取扩展的mime类型
Console.WriteLine("txt -> " + MimeTypeMap.GetMimeType("txt")); // "text/plain"
获取mime类型的扩展名
Console.WriteLine("audio/wav -> " + MimeTypeMap.GetExtension("audio/wav")); // ".wav"
GitHub网址:https://github.com/samuelneff/MimeTypeMap
其他回答
使用MimeTypeMap包,它提供了文件扩展名到mime类型以及mime类型到文件扩展名的巨大双向映射
使用mimetype;
获取扩展的mime类型
Console.WriteLine("txt -> " + MimeTypeMap.GetMimeType("txt")); // "text/plain"
获取mime类型的扩展名
Console.WriteLine("audio/wav -> " + MimeTypeMap.GetExtension("audio/wav")); // ".wav"
GitHub网址:https://github.com/samuelneff/MimeTypeMap
如果有人能在linux上使用libmagic类似的功能,那就更好了,因为我认为这是一种比依赖文件扩展名更好的检测文件类型的方法。
例如,如果我将一个文件从myppicture .jpg重命名为myppicture .txt 在linux上,它仍然会被报告为一张图片 但是在这里使用这种方法,它将被报告为文本文件。
目光Tomas
这个helper类返回任何文件名的mime类型(内容类型)、描述和图标:
using Microsoft.Win32;
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
public static class Helper
{
[DllImport("shell32.dll", CharSet = CharSet.Auto)]
private static extern int ExtractIconEx(string lpszFile, int nIconIndex, IntPtr[] phIconLarge, IntPtr[] phIconSmall, int nIcons);
[DllImport("user32.dll", SetLastError = true)]
private static extern int DestroyIcon(IntPtr hIcon);
public static string GetFileContentType(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException("fileName");
}
RegistryKey registryKey = null;
try
{
FileInfo fileInfo = new FileInfo(fileName);
if (string.IsNullOrEmpty(fileInfo.Extension))
{
return string.Empty;
}
string extension = fileInfo.Extension.ToLowerInvariant();
registryKey = Registry.ClassesRoot.OpenSubKey(extension);
if (registryKey == null)
{
return string.Empty;
}
object contentTypeObject = registryKey.GetValue("Content Type");
if (!(contentTypeObject is string))
{
return string.Empty;
}
string contentType = (string)contentTypeObject;
return contentType;
}
catch (Exception)
{
return null;
}
finally
{
if (registryKey != null)
{
registryKey.Close();
}
}
}
public static string GetFileDescription(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException("fileName");
}
RegistryKey registryKey1 = null;
RegistryKey registryKey2 = null;
try
{
FileInfo fileInfo = new FileInfo(fileName);
if (string.IsNullOrEmpty(fileInfo.Extension))
{
return string.Empty;
}
string extension = fileInfo.Extension.ToLowerInvariant();
registryKey1 = Registry.ClassesRoot.OpenSubKey(extension);
if (registryKey1 == null)
{
return string.Empty;
}
object extensionDefaultObject = registryKey1.GetValue(null);
if (!(extensionDefaultObject is string))
{
return string.Empty;
}
string extensionDefaultValue = (string)extensionDefaultObject;
registryKey2 = Registry.ClassesRoot.OpenSubKey(extensionDefaultValue);
if (registryKey2 == null)
{
return string.Empty;
}
object fileDescriptionObject = registryKey2.GetValue(null);
if (!(fileDescriptionObject is string))
{
return string.Empty;
}
string fileDescription = (string)fileDescriptionObject;
return fileDescription;
}
catch (Exception)
{
return null;
}
finally
{
if (registryKey2 != null)
{
registryKey2.Close();
}
if (registryKey1 != null)
{
registryKey1.Close();
}
}
}
public static void GetFileIcons(string fileName, out Icon smallIcon, out Icon largeIcon)
{
if (fileName == null)
{
throw new ArgumentNullException("fileName");
}
smallIcon = null;
largeIcon = null;
RegistryKey registryKey1 = null;
RegistryKey registryKey2 = null;
try
{
FileInfo fileInfo = new FileInfo(fileName);
if (string.IsNullOrEmpty(fileInfo.Extension))
{
return;
}
string extension = fileInfo.Extension.ToLowerInvariant();
registryKey1 = Registry.ClassesRoot.OpenSubKey(extension);
if (registryKey1 == null)
{
return;
}
object extensionDefaultObject = registryKey1.GetValue(null);
if (!(extensionDefaultObject is string))
{
return;
}
string defaultIconKeyName = string.Format("{0}\\DefaultIcon", extensionDefaultObject);
registryKey2 = Registry.ClassesRoot.OpenSubKey(defaultIconKeyName);
if (registryKey2 == null)
{
return;
}
object defaultIconPathObject = registryKey2.GetValue(null);
if (!(defaultIconPathObject is string))
{
return;
}
string defaultIconPath = (string)defaultIconPathObject;
if (string.IsNullOrWhiteSpace(defaultIconPath))
{
return;
}
string iconfileName = null;
int iconIndex = 0;
int commaIndex = defaultIconPath.IndexOf(",");
if (commaIndex > 0)
{
iconfileName = defaultIconPath.Substring(0, commaIndex);
string iconIndexString = defaultIconPath.Substring(commaIndex + 1);
if (!int.TryParse(iconIndexString, out iconIndex))
{
iconIndex = 0;
}
}
else
{
iconfileName = defaultIconPath;
iconIndex = 0;
}
IntPtr[] phiconSmall = new IntPtr[1] { IntPtr.Zero };
IntPtr[] phiconLarge = new IntPtr[1] { IntPtr.Zero };
int readIconCount = ExtractIconEx(iconfileName, iconIndex, phiconLarge, phiconSmall, 1);
if (readIconCount < 0)
{
return;
}
if (phiconSmall[0] != IntPtr.Zero)
{
smallIcon = (Icon)Icon.FromHandle(phiconSmall[0]).Clone();
DestroyIcon(phiconSmall[0]);
}
if (phiconLarge[0] != IntPtr.Zero)
{
largeIcon = (Icon)Icon.FromHandle(phiconLarge[0]).Clone();
DestroyIcon(phiconLarge[0]);
}
return;
}
finally
{
if (registryKey2 != null)
{
registryKey2.Close();
}
if (registryKey1 != null)
{
registryKey1.Close();
}
}
}
}
用法:
string fileName = "NotExists.txt";
string contentType = Helper.GetFileContentType(fileName); // "text/plain"
string description = Helper.GetFileDescription(fileName); // "Text Document"
Icon smallIcon, largeIcon;
Helper.GetFileIcons(fileName, out smallIcon, out largeIcon); // 16x16, 32x32 icons
我已经编写了一个程序来获取和转换Apache mime。类型文件到c#字典<字符串,字符串>的关键文件扩展名。这里的。
实际的输出是这个文件(但是您可能希望获取它并再次运行它,以防Apache文件在我上次运行之后已经更新)。
public static Dictionary<string, string> MimeTypes = new Dictionary<string, string>
{
{ "123", "application/vnd.lotus-1-2-3" },
{ "3dml", "text/vnd.in3d.3dml" },
{ "3g2", "video/3gpp2" },
{ "3gp", "video/3gpp" },
{ "7z", "application/x-7z-compressed" },
{ "aab", "application/x-authorware-bin" },
{ "aac", "audio/x-aac" },
{ "aam", "application/x-authorware-map" },
{ "aas", "application/x-authorware-seg" },
{ "abw", "application/x-abiword" },
...
**使用MediaTypeNames类——>样本:MediaTypeNames. application . pdf **
推荐文章
- ASP是什么?NET Identity的IUserSecurityStampStore<TUser>接口?
- net HttpClient。如何POST字符串值?
- 我如何使一个方法的返回类型泛型?
- 何时处理CancellationTokenSource?
- ASP。网网络。config: configSource vs.文件属性
- 如何获取正在执行的程序集版本?
- AutoMapper vs valueinjector
- 为什么控制台不。Writeline,控制台。在Visual Studio Express中编写工作?
- 什么是.NET程序集?
- 字符串不能识别为有效的日期时间“格式dd/MM/yyyy”
- 函数应该返回空对象还是空对象?
- 如何转换日期时间?将日期时间
- 如何在c#中连接列表?
- 在c#中引用类型变量的“ref”的用途是什么?
- 防止在ASP中缓存。NET MVC中使用属性的特定操作