MimeTypes.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using System.IO;
  3. namespace MediaBrowser.Common.Net
  4. {
  5. /// <summary>
  6. /// Class MimeTypes
  7. /// </summary>
  8. public static class MimeTypes
  9. {
  10. /// <summary>
  11. /// The json MIME type
  12. /// </summary>
  13. public static string JsonMimeType = "application/json";
  14. /// <summary>
  15. /// Gets the type of the MIME.
  16. /// </summary>
  17. /// <param name="path">The path.</param>
  18. /// <returns>System.String.</returns>
  19. /// <exception cref="System.ArgumentNullException">path</exception>
  20. /// <exception cref="System.InvalidOperationException">Argument not supported: + path</exception>
  21. public static string GetMimeType(string path)
  22. {
  23. if (string.IsNullOrEmpty(path))
  24. {
  25. throw new ArgumentNullException("path");
  26. }
  27. var ext = Path.GetExtension(path) ?? string.Empty;
  28. // http://en.wikipedia.org/wiki/Internet_media_type
  29. // Add more as needed
  30. // Type video
  31. if (ext.Equals(".mpg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("mpeg", StringComparison.OrdinalIgnoreCase))
  32. {
  33. return "video/mpeg";
  34. }
  35. if (ext.Equals(".mp4", StringComparison.OrdinalIgnoreCase))
  36. {
  37. return "video/mp4";
  38. }
  39. if (ext.Equals(".ogv", StringComparison.OrdinalIgnoreCase))
  40. {
  41. return "video/ogg";
  42. }
  43. if (ext.Equals(".mov", StringComparison.OrdinalIgnoreCase))
  44. {
  45. return "video/quicktime";
  46. }
  47. if (ext.Equals(".webm", StringComparison.OrdinalIgnoreCase))
  48. {
  49. return "video/webm";
  50. }
  51. if (ext.Equals(".mkv", StringComparison.OrdinalIgnoreCase))
  52. {
  53. return "video/x-matroska";
  54. }
  55. if (ext.Equals(".wmv", StringComparison.OrdinalIgnoreCase))
  56. {
  57. return "video/x-ms-wmv";
  58. }
  59. if (ext.Equals(".flv", StringComparison.OrdinalIgnoreCase))
  60. {
  61. return "video/x-flv";
  62. }
  63. if (ext.Equals(".avi", StringComparison.OrdinalIgnoreCase))
  64. {
  65. return "video/avi";
  66. }
  67. if (ext.Equals(".m4v", StringComparison.OrdinalIgnoreCase))
  68. {
  69. return "video/x-m4v";
  70. }
  71. if (ext.EndsWith("asf", StringComparison.OrdinalIgnoreCase))
  72. {
  73. return "video/x-ms-asf";
  74. }
  75. if (ext.Equals(".3gp", StringComparison.OrdinalIgnoreCase))
  76. {
  77. return "video/3gpp";
  78. }
  79. if (ext.Equals(".3g2", StringComparison.OrdinalIgnoreCase))
  80. {
  81. return "video/3gpp2";
  82. }
  83. if (ext.Equals(".ts", StringComparison.OrdinalIgnoreCase))
  84. {
  85. return "video/mp2t";
  86. }
  87. // Type text
  88. if (ext.Equals(".css", StringComparison.OrdinalIgnoreCase))
  89. {
  90. return "text/css";
  91. }
  92. if (ext.Equals(".csv", StringComparison.OrdinalIgnoreCase))
  93. {
  94. return "text/csv";
  95. }
  96. if (ext.Equals(".html", StringComparison.OrdinalIgnoreCase) || ext.Equals(".htm", StringComparison.OrdinalIgnoreCase))
  97. {
  98. return "text/html; charset=UTF-8";
  99. }
  100. if (ext.Equals(".txt", StringComparison.OrdinalIgnoreCase))
  101. {
  102. return "text/plain";
  103. }
  104. if (ext.Equals(".xml", StringComparison.OrdinalIgnoreCase))
  105. {
  106. return "application/xml";
  107. }
  108. // Type image
  109. if (ext.Equals(".gif", StringComparison.OrdinalIgnoreCase))
  110. {
  111. return "image/gif";
  112. }
  113. if (ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".jpeg", StringComparison.OrdinalIgnoreCase))
  114. {
  115. return "image/jpeg";
  116. }
  117. if (ext.Equals(".png", StringComparison.OrdinalIgnoreCase))
  118. {
  119. return "image/png";
  120. }
  121. if (ext.Equals(".ico", StringComparison.OrdinalIgnoreCase))
  122. {
  123. return "image/vnd.microsoft.icon";
  124. }
  125. // Type audio
  126. if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase))
  127. {
  128. return "audio/mpeg";
  129. }
  130. if (ext.Equals(".m4a", StringComparison.OrdinalIgnoreCase) || ext.Equals(".aac", StringComparison.OrdinalIgnoreCase))
  131. {
  132. return "audio/mp4";
  133. }
  134. if (ext.Equals(".webma", StringComparison.OrdinalIgnoreCase))
  135. {
  136. return "audio/webm";
  137. }
  138. if (ext.Equals(".wav", StringComparison.OrdinalIgnoreCase))
  139. {
  140. return "audio/wav";
  141. }
  142. if (ext.Equals(".wma", StringComparison.OrdinalIgnoreCase))
  143. {
  144. return "audio/x-ms-wma";
  145. }
  146. if (ext.Equals(".flac", StringComparison.OrdinalIgnoreCase))
  147. {
  148. return "audio/flac";
  149. }
  150. if (ext.Equals(".aac", StringComparison.OrdinalIgnoreCase))
  151. {
  152. return "audio/x-aac";
  153. }
  154. if (ext.Equals(".ogg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".oga", StringComparison.OrdinalIgnoreCase))
  155. {
  156. return "audio/ogg";
  157. }
  158. // Playlists
  159. if (ext.Equals(".m3u8", StringComparison.OrdinalIgnoreCase))
  160. {
  161. return "application/x-mpegURL";
  162. }
  163. // Misc
  164. if (ext.Equals(".dll", StringComparison.OrdinalIgnoreCase))
  165. {
  166. return "application/x-msdownload";
  167. }
  168. // Web
  169. if (ext.Equals(".js", StringComparison.OrdinalIgnoreCase))
  170. {
  171. return "application/x-javascript";
  172. }
  173. if (ext.Equals(".woff", StringComparison.OrdinalIgnoreCase))
  174. {
  175. return "font/woff";
  176. }
  177. if (ext.Equals(".ttf", StringComparison.OrdinalIgnoreCase))
  178. {
  179. return "font/ttf";
  180. }
  181. if (ext.Equals(".eot", StringComparison.OrdinalIgnoreCase))
  182. {
  183. return "application/vnd.ms-fontobject";
  184. }
  185. if (ext.Equals(".svg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".svgz", StringComparison.OrdinalIgnoreCase))
  186. {
  187. return "image/svg+xml";
  188. }
  189. throw new ArgumentException("Argument not supported: " + path);
  190. }
  191. }
  192. }