Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中设置MimeType#_C# - Fatal编程技术网

C# 在C中设置MimeType#

C# 在C中设置MimeType#,c#,C#,有没有比我正在尝试的更好的方法来设置C#中的mimetype 提前谢谢 static String MimeType(string filePath) { String ret = null; FileInfo file = new FileInfo(filePath); if (file.Extension.ToUpper() == ".PDF") { ret = "application/pdf"; } else if (file.Extension.ToU

有没有比我正在尝试的更好的方法来设置C#中的mimetype 提前谢谢

static String MimeType(string filePath)
{
  String ret = null;
  FileInfo file = new FileInfo(filePath);

  if (file.Extension.ToUpper() == ".PDF")
  {
    ret = "application/pdf";
  }
  else if (file.Extension.ToUpper() == ".JPG" || file.Extension.ToUpper() == ".JPEG")
  {
    ret = "image/jpeg";
  }
  else if (file.Extension.ToUpper() == ".PNG")
  {
    ret = "image/png";
  }
  else if (file.Extension.ToUpper() == ".GIF")
  {
    ret = "image/gif";
  }
  else if (file.Extension.ToUpper() == ".TIFF" || file.Extension.ToUpper() == ".TIF")
  {
    ret = "image/tiff";
  }
  else
  {
    ret = "image/" + file.Extension.Replace(".", "");
  }

  return ret;
}

如果您没有注册表访问权限或不想使用注册表,您可以随时为此使用字典

Dictionary<string,string> mimeTypes = new Dictionary<string,string>() { 
 { ".PDF","application/pdf"},
 { ".JPG", "image/jpeg" },
 { ".JPEG", "image/jpeg" } }; // and so on
此外,您可以将这些映射存储在XML文件中,并使用文件依赖项缓存它们,而不是将它们保存在代码中。

我从blogpost获得了以下信息:

private string GetMimeType (string fileName)
{
    string mimeType = "application/unknown";
    string ext = System.IO.Path.GetExtension(fileName).ToLower();
    Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
    if (regKey != null && regKey.GetValue("Content Type") != null)
    mimeType = regKey.GetValue("Content Type").ToString();
    return mimeType;
}
事实可能更清楚

private static Dictionary<String, String> mtypes = new Dictionary<string, string> {
        {".PDF", "application/pdf" },
        {".JPG", "image/jpeg"},
        {".PNG", "image/png"},
        {".GIF", "image/gif"},
        {".TIFF","image/tiff"},
        {".TIF", "image/tiff"}
    };

static String MimeType(String filePath)
{
    System.IO.FileInfo file = new System.IO.FileInfo(filePath);
    String filetype = file.Extension.ToUpper();
    if(mtypes.Keys.Contains<String>(filetype))
        return mtypes[filetype];
    return "image/" + filetype.Replace(".", "").ToLower();
}
private static Dictionary mtypes=新字典{
{.PDF”,“application/PDF”},
{.JPG”,“image/jpeg”},
{.PNG”,“image/PNG”},
{.GIF”,“image/GIF”},
{.TIFF”,“image/TIFF”},
{.TIF”,“image/tiff”}
};
静态字符串MimeType(字符串文件路径)
{
System.IO.FileInfo file=新的System.IO.FileInfo(filePath);
String filetype=file.Extension.ToUpper();
if(mtypes.Keys.Contains(filetype))
返回mtypes[filetype];
返回“image/”+filetype.Replace(“.”,“”)。ToLower();
}

仅需这一行即可完成此操作

System.Web.MimeMapping.GetMimeMapping(FileName)

注意:它只是
.NET 4.5+
而已

我仍然不明白为什么MS在System.Web中使用的大量MIME类型集合还没有提供,我将内部类公开了。。。每个人都在编写自己的方法来获取文件名的mime类型,只有很少的人真正做到了这一点。可能的重复还有[使用.NET,如何根据文件签名而不是扩展名来查找文件的mime类型。]()仍然需要硬编码,我认为问题在于使用现有的API,而不是使用另一个实现。我打算建议使用注册表。但是,如果您在部分信任模式下运行,我认为您需要显式地授予注册表访问权限,否则它将被拒绝。我可能也会将请求缓存在你的应用程序中,而不是每次都进行查询,但这更多的是因为我对调用注册表而不是硬数据感到不安。也许还值得指出:如果没有注册表内容类型,IIS将拒绝提供文件,而不是app/unknown。您可能希望在您的答案中包含Rup的注释(链接到文档,它是4.5+)。
System.Web.MimeMapping.GetMimeMapping(FileName)