如何通过文件扩展名确定mime类型? (ruby)

我在stackoverflow上看过这样的问题,但没有什么是ruby的。

所以我有这样的文件扩展名:

csshtmljsjson

我想将它们转换成:

text/csstext/htmltext/javascriptapplication/json

我想在ruby中实现这一点。

写完之后:

 ext_to_mime("css") 

我应该得到:

 text/css 

如果有任何gem,也欢迎他们。

你可以使用mime-types gem:

 puts MIME::Types.type_for('css') => [text/css] 

您可以使用哈希来映射自定义MIME类型,您可以创建单独的类并传递extension和返回value

  get_mime = { ".323" => "text/h323", ".3g2" => "video/3gpp2", ".3gp" => "video/3gpp", ".3gp2" => "video/3gpp2", ".3gpp" => "video/3gpp", ".7z" => "application/x-7z-compressed", ".aa" => "audio/audible", ".AAC" => "audio/aac", ".aaf" => "application/octet-stream", ".aax" => "audio/vnd.audible.aax", ".ac3" => "audio/ac3", ".aca" => "application/octet-stream", ".accda" => "application/msaccess.addin", ".accdb" => "application/msaccess", ".accdc" => "application/msaccess.cab", ".accde" => "application/msaccess", ".accdr" => "application/msaccess.runtime", ".accdt" => "application/msaccess", ".accdw" => "application/msaccess.webapplication", ".accft" => "application/msaccess.ftemplate", ".acx" => "application/internet-property-stream", ".AddIn" => "text/xml", ".ade" => "application/msaccess", ".adobebridge" => "application/x-bridge-url", ".adp" => "application/msaccess", ".ADT" => "audio/vnd.dlna.adts", ".ADTS" => "audio/aac", ".afm" => "application/octet-stream", ".ai" => "application/postscript", ".aif" => "audio/x-aiff", ".aifc" => "audio/aiff", ".aiff" => "audio/aiff", ".air" => "application/vnd.adobe.air-application-installer-package+zip", ".amc" => "application/x-mpeg", ".application" => "application/x-ms-application", ".art" => "image/x-jg", ".asa" => "application/xml", ".asax" => "application/xml", ".ascx" => "application/xml", ".asd" => "application/octet-stream", ".asf" => "video/x-ms-asf", ".ashx" => "application/xml", ".asi" => "application/octet-stream", ".asm" => "text/plain", ".asmx" => "application/xml", ".aspx" => "application/xml", ".asr" => "video/x-ms-asf", ".asx" => "video/x-ms-asf", ".atom" => "application/atom+xml", ".au" => "audio/basic", ".avi" => "video/x-msvideo", ".axs" => "application/olescript", ".bas" => "text/plain", ".bcpio" => "application/x-bcpio", ".bin" => "application/octet-stream", ".bmp" => "image/bmp", ".c" => "text/plain", ".cab" => "application/octet-stream", ".caf" => "audio/x-caf", ".calx" => "application/vnd.ms-office.calx", ".cat" => "application/vnd.ms-pki.seccat", ".cc" => "text/plain", ".cd" => "text/plain", ".cdda" => "audio/aiff", ".cdf" => "application/x-cdf", ".cer" => "application/x-x509-ca-cert", ".chm" => "application/octet-stream", ".class" => "application/x-java-applet", ".clp" => "application/x-msclip", ".cmx" => "image/x-cmx", ".cnf" => "text/plain", ".cod" => "image/cis-cod", ".config" => "application/xml", ".contact" => "text/x-ms-contact", ".coverage" => "application/xml", ".cpio" => "application/x-cpio", ".cpp" => "text/plain", ".crd" => "application/x-mscardfile", ".crl" => "application/pkix-crl", ".crt" => "application/x-x509-ca-cert", ".cs" => "text/plain", ".csdproj" => "text/plain", ".csh" => "application/x-csh", ".csproj" => "text/plain", ".css" => "text/css", ".csv" => "text/csv", ".cur" => "application/octet-stream", ".cxx" => "text/plain", ".dat" => "application/octet-stream", ".datasource" => "application/xml", ".dbproj" => "text/plain", ".dcr" => "application/x-director", ".def" => "text/plain", ".deploy" => "application/octet-stream", ".der" => "application/x-x509-ca-cert", ".dgml" => "application/xml", ".dib" => "image/bmp", ".dif" => "video/x-dv", ".dir" => "application/x-director", ".disco" => "text/xml", ".dll" => "application/x-msdownload", ".dll.config" => "text/xml", ".dlm" => "text/dlm", ".doc" => "application/msword", ".docm" => "application/vnd.ms-word.document.macroEnabled.12", ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", ".dot" => "application/msword", ".dotm" => "application/vnd.ms-word.template.macroEnabled.12", ".dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template", ".dsp" => "application/octet-stream", ".dsw" => "text/plain", ".dtd" => "text/xml", ".dtsConfig" => "text/xml", ".dv" => "video/x-dv", ".dvi" => "application/x-dvi", ".dwf" => "drawing/x-dwf", ".dwp" => "application/octet-stream", ".dxr" => "application/x-director", ".eml" => "message/rfc822", ".emz" => "application/octet-stream", ".eot" => "application/octet-stream", ".eps" => "application/postscript", ".etl" => "application/etl", ".etx" => "text/x-setext", ".evy" => "application/envoy", ".exe" => "application/octet-stream", ".exe.config" => "text/xml", ".fdf" => "application/vnd.fdf", ".fif" => "application/fractals", ".filters" => "Application/xml", ".fla" => "application/octet-stream", ".flr" => "x-world/x-vrml", ".flv" => "video/x-flv", ".fsscript" => "application/fsharp-script", ".fsx" => "application/fsharp-script", ".generictest" => "application/xml", ".gif" => "image/gif", ".group" => "text/x-ms-group", ".gsm" => "audio/x-gsm", ".gtar" => "application/x-gtar", ".gz" => "application/x-gzip", ".h" => "text/plain", ".hdf" => "application/x-hdf", ".hdml" => "text/x-hdml", ".hhc" => "application/x-oleobject", ".hhk" => "application/octet-stream", ".hhp" => "application/octet-stream", ".hlp" => "application/winhlp", ".hpp" => "text/plain", ".hqx" => "application/mac-binhex40", ".hta" => "application/hta", ".htc" => "text/x-component", ".htm" => "text/html", ".html" => "text/html", ".htt" => "text/webviewhtml", ".hxa" => "application/xml", ".hxc" => "application/xml", ".hxd" => "application/octet-stream", ".hxe" => "application/xml", ".hxf" => "application/xml", ".hxh" => "application/octet-stream", ".hxi" => "application/octet-stream", ".hxk" => "application/xml", ".hxq" => "application/octet-stream", ".hxr" => "application/octet-stream", ".hxs" => "application/octet-stream", ".hxt" => "text/html", ".hxv" => "application/xml", ".hxw" => "application/octet-stream", ".hxx" => "text/plain", ".i" => "text/plain", ".ico" => "image/x-icon", ".ics" => "application/octet-stream", ".idl" => "text/plain", ".ief" => "image/ief", ".iii" => "application/x-iphone", ".inc" => "text/plain", ".inf" => "application/octet-stream", ".inl" => "text/plain", ".ins" => "application/x-internet-signup", ".ipa" => "application/x-itunes-ipa", ".ipg" => "application/x-itunes-ipg", ".ipproj" => "text/plain", ".ipsw" => "application/x-itunes-ipsw", ".iqy" => "text/x-ms-iqy", ".isp" => "application/x-internet-signup", ".ite" => "application/x-itunes-ite", ".itlp" => "application/x-itunes-itlp", ".itms" => "application/x-itunes-itms", ".itpc" => "application/x-itunes-itpc", ".IVF" => "video/x-ivf", ".jar" => "application/java-archive", ".java" => "application/octet-stream", ".jck" => "application/liquidmotion", ".jcz" => "application/liquidmotion", ".jfif" => "image/pjpeg", ".jnlp" => "application/x-java-jnlp-file", ".jpb" => "application/octet-stream", ".jpe" => "image/jpeg", ".jpeg" => "image/jpeg", ".jpg" => "image/jpeg", ".js" => "application/x-javascript", ".jsx" => "text/jscript", ".jsxbin" => "text/plain", ".latex" => "application/x-latex", ".library-ms" => "application/windows-library+xml", ".lit" => "application/x-ms-reader", ".loadtest" => "application/xml", ".lpk" => "application/octet-stream", ".lsf" => "video/x-la-asf", ".lst" => "text/plain", ".lsx" => "video/x-la-asf", ".lzh" => "application/octet-stream", ".m13" => "application/x-msmediaview", ".m14" => "application/x-msmediaview", ".m1v" => "video/mpeg", ".m2t" => "video/vnd.dlna.mpeg-tts", ".m2ts" => "video/vnd.dlna.mpeg-tts", ".m2v" => "video/mpeg", ".m3u" => "audio/x-mpegurl", ".m3u8" => "audio/x-mpegurl", ".m4a" => "audio/m4a", ".m4b" => "audio/m4b", ".m4p" => "audio/m4p", ".m4r" => "audio/x-m4r", ".m4v" => "video/x-m4v", ".mac" => "image/x-macpaint", ".mak" => "text/plain", ".man" => "application/x-troff-man", ".manifest" => "application/x-ms-manifest", ".map" => "text/plain", ".master" => "application/xml", ".mda" => "application/msaccess", ".mdb" => "application/x-msaccess", ".mde" => "application/msaccess", ".mdp" => "application/octet-stream", ".me" => "application/x-troff-me", ".mfp" => "application/x-shockwave-flash", ".mht" => "message/rfc822", ".mhtml" => "message/rfc822", ".mid" => "audio/mid", ".midi" => "audio/mid", ".mix" => "application/octet-stream", ".mk" => "text/plain", ".mmf" => "application/x-smaf", ".mno" => "text/xml", ".mny" => "application/x-msmoney", ".mod" => "video/mpeg", ".mov" => "video/quicktime", ".movie" => "video/x-sgi-movie", ".mp2" => "video/mpeg", ".mp2v" => "video/mpeg", ".mp3" => "audio/mpeg", ".mp4" => "video/mp4", ".mp4v" => "video/mp4", ".mpa" => "video/mpeg", ".mpe" => "video/mpeg", ".mpeg" => "video/mpeg", ".mpf" => "application/vnd.ms-mediapackage", ".mpg" => "video/mpeg", ".mpp" => "application/vnd.ms-project", ".mpv2" => "video/mpeg", ".mqv" => "video/quicktime", ".ms" => "application/x-troff-ms", ".msi" => "application/octet-stream", ".mso" => "application/octet-stream", ".mts" => "video/vnd.dlna.mpeg-tts", ".mtx" => "application/xml", ".mvb" => "application/x-msmediaview", ".mvc" => "application/x-miva-compiled", ".mxp" => "application/x-mmxp", ".nc" => "application/x-netcdf", ".nsc" => "video/x-ms-asf", ".nws" => "message/rfc822", ".ocx" => "application/octet-stream", ".oda" => "application/oda", ".odc" => "text/x-ms-odc", ".odh" => "text/plain", ".odl" => "text/plain", ".odp" => "application/vnd.oasis.opendocument.presentation", ".ods" => "application/oleobject", ".odt" => "application/vnd.oasis.opendocument.text", ".one" => "application/onenote", ".onea" => "application/onenote", ".onepkg" => "application/onenote", ".onetmp" => "application/onenote", ".onetoc" => "application/onenote", ".onetoc2" => "application/onenote", ".orderedtest" => "application/xml", ".osdx" => "application/opensearchdescription+xml", ".p10" => "application/pkcs10", ".p12" => "application/x-pkcs12", ".p7b" => "application/x-pkcs7-certificates", ".p7c" => "application/pkcs7-mime", ".p7m" => "application/pkcs7-mime", ".p7r" => "application/x-pkcs7-certreqresp", ".p7s" => "application/pkcs7-signature", ".pbm" => "image/x-portable-bitmap", ".pcast" => "application/x-podcast", ".pct" => "image/pict", ".pcx" => "application/octet-stream", ".pcz" => "application/octet-stream", ".pdf" => "application/pdf", ".pfb" => "application/octet-stream", ".pfm" => "application/octet-stream", ".pfx" => "application/x-pkcs12", ".pgm" => "image/x-portable-graymap", ".pic" => "image/pict", ".pict" => "image/pict", ".pkgdef" => "text/plain", ".pkgundef" => "text/plain", ".pko" => "application/vnd.ms-pki.pko", ".pls" => "audio/scpls", ".pma" => "application/x-perfmon", ".pmc" => "application/x-perfmon", ".pml" => "application/x-perfmon", ".pmr" => "application/x-perfmon", ".pmw" => "application/x-perfmon", ".png" => "image/png", ".pnm" => "image/x-portable-anymap", ".pnt" => "image/x-macpaint", ".pntg" => "image/x-macpaint", ".pnz" => "image/png", ".pot" => "application/vnd.ms-powerpoint", ".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12", ".potx" => "application/vnd.openxmlformats-officedocument.presentationml.template", ".ppa" => "application/vnd.ms-powerpoint", ".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12", ".ppm" => "image/x-portable-pixmap", ".pps" => "application/vnd.ms-powerpoint", ".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", ".ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow", ".ppt" => "application/vnd.ms-powerpoint", ".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12", ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", ".prf" => "application/pics-rules", ".prm" => "application/octet-stream", ".prx" => "application/octet-stream", ".ps" => "application/postscript", ".psc1" => "application/PowerShell", ".psd" => "application/octet-stream", ".psess" => "application/xml", ".psm" => "application/octet-stream", ".psp" => "application/octet-stream", ".pub" => "application/x-mspublisher", ".pwz" => "application/vnd.ms-powerpoint", ".qht" => "text/x-html-insertion", ".qhtm" => "text/x-html-insertion", ".qt" => "video/quicktime", ".qti" => "image/x-quicktime", ".qtif" => "image/x-quicktime", ".qtl" => "application/x-quicktimeplayer", ".qxd" => "application/octet-stream", ".ra" => "audio/x-pn-realaudio", ".ram" => "audio/x-pn-realaudio", ".rar" => "application/octet-stream", ".ras" => "image/x-cmu-raster", ".rat" => "application/rat-file", ".rc" => "text/plain", ".rc2" => "text/plain", ".rct" => "text/plain", ".rdlc" => "application/xml", ".resx" => "application/xml", ".rf" => "image/vnd.rn-realflash", ".rgb" => "image/x-rgb", ".rgs" => "text/plain", ".rm" => "application/vnd.rn-realmedia", ".rmi" => "audio/mid", ".rmp" => "application/vnd.rn-rn_music_package", ".roff" => "application/x-troff", ".rpm" => "audio/x-pn-realaudio-plugin", ".rqy" => "text/x-ms-rqy", ".rtf" => "application/rtf", ".rtx" => "text/richtext", ".ruleset" => "application/xml", ".s" => "text/plain", ".safariextz" => "application/x-safari-safariextz", ".scd" => "application/x-msschedule", ".sct" => "text/scriptlet", ".sd2" => "audio/x-sd2", ".sdp" => "application/sdp", ".sea" => "application/octet-stream", ".searchConnector-ms" => "application/windows-search-connector+xml", ".setpay" => "application/set-payment-initiation", ".setreg" => "application/set-registration-initiation", ".settings" => "application/xml", ".sgimb" => "application/x-sgimb", ".sgml" => "text/sgml", ".sh" => "application/x-sh", ".shar" => "application/x-shar", ".shtml" => "text/html", ".sit" => "application/x-stuffit", ".sitemap" => "application/xml", ".skin" => "application/xml", ".sldm" => "application/vnd.ms-powerpoint.slide.macroEnabled.12", ".sldx" => "application/vnd.openxmlformats-officedocument.presentationml.slide", ".slk" => "application/vnd.ms-excel", ".sln" => "text/plain", ".slupkg-ms" => "application/x-ms-license", ".smd" => "audio/x-smd", ".smi" => "application/octet-stream", ".smx" => "audio/x-smd", ".smz" => "audio/x-smd", ".snd" => "audio/basic", ".snippet" => "application/xml", ".snp" => "application/octet-stream", ".sol" => "text/plain", ".sor" => "text/plain", ".spc" => "application/x-pkcs7-certificates", ".spl" => "application/futuresplash", ".src" => "application/x-wais-source", ".srf" => "text/plain", ".SSISDeploymentManifest" => "text/xml", ".ssm" => "application/streamingmedia", ".sst" => "application/vnd.ms-pki.certstore", ".stl" => "application/vnd.ms-pki.stl", ".sv4cpio" => "application/x-sv4cpio", ".sv4crc" => "application/x-sv4crc", ".svc" => "application/xml", ".swf" => "application/x-shockwave-flash", ".t" => "application/x-troff", ".tar" => "application/x-tar", ".tcl" => "application/x-tcl", ".testrunconfig" => "application/xml", ".testsettings" => "application/xml", ".tex" => "application/x-tex", ".texi" => "application/x-texinfo", ".texinfo" => "application/x-texinfo", ".tgz" => "application/x-compressed", ".thmx" => "application/vnd.ms-officetheme", ".thn" => "application/octet-stream", ".tif" => "image/tiff", ".tiff" => "image/tiff", ".tlh" => "text/plain", ".tli" => "text/plain", ".toc" => "application/octet-stream", ".tr" => "application/x-troff", ".trm" => "application/x-msterminal", ".trx" => "application/xml", ".ts" => "video/vnd.dlna.mpeg-tts", ".tsv" => "text/tab-separated-values", ".ttf" => "application/octet-stream", ".tts" => "video/vnd.dlna.mpeg-tts", ".txt" => "text/plain", ".u32" => "application/octet-stream", ".uls" => "text/iuls", ".user" => "text/plain", ".ustar" => "application/x-ustar", ".vb" => "text/plain", ".vbdproj" => "text/plain", ".vbk" => "video/mpeg", ".vbproj" => "text/plain", ".vbs" => "text/vbscript", ".vcf" => "text/x-vcard", ".vcproj" => "Application/xml", ".vcs" => "text/plain", ".vcxproj" => "Application/xml", ".vddproj" => "text/plain", ".vdp" => "text/plain", ".vdproj" => "text/plain", ".vdx" => "application/vnd.ms-visio.viewer", ".vml" => "text/xml", ".vscontent" => "application/xml", ".vsct" => "text/xml", ".vsd" => "application/vnd.visio", ".vsi" => "application/ms-vsi", ".vsix" => "application/vsix", ".vsixlangpack" => "text/xml", ".vsixmanifest" => "text/xml", ".vsmdi" => "application/xml", ".vspscc" => "text/plain", ".vss" => "application/vnd.visio", ".vsscc" => "text/plain", ".vssettings" => "text/xml", ".vssscc" => "text/plain", ".vst" => "application/vnd.visio", ".vstemplate" => "text/xml", ".vsto" => "application/x-ms-vsto", ".vsw" => "application/vnd.visio", ".vsx" => "application/vnd.visio", ".vtx" => "application/vnd.visio", ".wav" => "audio/wav", ".wave" => "audio/wav", ".wax" => "audio/x-ms-wax", ".wbk" => "application/msword", ".wbmp" => "image/vnd.wap.wbmp", ".wcm" => "application/vnd.ms-works", ".wdb" => "application/vnd.ms-works", ".wdp" => "image/vnd.ms-photo", ".webarchive" => "application/x-safari-webarchive", ".webtest" => "application/xml", ".wiq" => "application/xml", ".wiz" => "application/msword", ".wks" => "application/vnd.ms-works", ".WLMP" => "application/wlmoviemaker", ".wlpginstall" => "application/x-wlpg-detect", ".wlpginstall3" => "application/x-wlpg3-detect", ".wm" => "video/x-ms-wm", ".wma" => "audio/x-ms-wma", ".wmd" => "application/x-ms-wmd", ".wmf" => "application/x-msmetafile", ".wml" => "text/vnd.wap.wml", ".wmlc" => "application/vnd.wap.wmlc", ".wmls" => "text/vnd.wap.wmlscript", ".wmlsc" => "application/vnd.wap.wmlscriptc", ".wmp" => "video/x-ms-wmp", ".wmv" => "video/x-ms-wmv", ".wmx" => "video/x-ms-wmx", ".wmz" => "application/x-ms-wmz", ".wpl" => "application/vnd.ms-wpl", ".wps" => "application/vnd.ms-works", ".wri" => "application/x-mswrite", ".wrl" => "x-world/x-vrml", ".wrz" => "x-world/x-vrml", ".wsc" => "text/scriptlet", ".wsdl" => "text/xml", ".wvx" => "video/x-ms-wvx", ".x" => "application/directx", ".xaf" => "x-world/x-vrml", ".xaml" => "application/xaml+xml", ".xap" => "application/x-silverlight-app", ".xbap" => "application/x-ms-xbap", ".xbm" => "image/x-xbitmap", ".xdr" => "text/plain", ".xht" => "application/xhtml+xml", ".xhtml" => "application/xhtml+xml", ".xla" => "application/vnd.ms-excel", ".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12", ".xlc" => "application/vnd.ms-excel", ".xld" => "application/vnd.ms-excel", ".xlk" => "application/vnd.ms-excel", ".xll" => "application/vnd.ms-excel", ".xlm" => "application/vnd.ms-excel", ".xls" => "application/vnd.ms-excel", ".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12", ".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12", ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlt" => "application/vnd.ms-excel", ".xltm" => "application/vnd.ms-excel.template.macroEnabled.12", ".xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template", ".xlw" => "application/vnd.ms-excel", ".xml" => "text/xml", ".xmta" => "application/xml", ".xof" => "x-world/x-vrml", ".XOML" => "text/plain", ".xpm" => "image/x-xpixmap", ".xps" => "application/vnd.ms-xpsdocument", ".xrm-ms" => "text/xml", ".xsc" => "application/xml", ".xsd" => "text/xml", ".xsf" => "text/xml", ".xsl" => "text/xml", ".xslt" => "text/xml", ".xsn" => "application/octet-stream", ".xss" => "application/xml", ".xtp" => "application/octet-stream", ".xwd" => "image/x-xwindowdump", ".z" => "application/x-compress", ".zip" => "application/x-zip-compressed"} 

并且可以像使用它一样

 get_mime["#{ext}"] ## ext is .jpg 

它将提供您想要的输出。

干杯!!

使用简单大小写表达式格式化MIME类型

如果您只有四种文件类型,并且其中三种映射到相同的MIME前缀,则可以使用File#extname提取文件名的前缀以构造正确的MIME类型。 例如:

 def fmt_mime_type filename file_extension = File.extname(filename).delete ?. case file_extension when 'json' then 'application/json' else "text/#{file_extension}" end end %w[foo.css foo.html foo.js foo.json].map { |f| fmt_mime_type f } #=> ["text/css", "text/html", "text/js", "application/json"] 

注意事项

这是一种整洁而有点天真的方法,并且提取File#extname将无法与Rails资产管道一起使用。 例如,如果您使用foo.html.haml的磁盘文件名,那么extname方法会将扩展名报告为“.haml”而不是“.html”,这可能不是您想要的。

在需要检测文件的实际MIME类型的更复杂情况下,您可能需要使用libmagic1 C库或模仿或包装它的Ruby gem检查文件的幻数 。 你的里程会有所不同。