我在stackoverflow上看过这样的问题,但没有任何东西可以用于ruby。
所以我有这样的文件扩展名:
css
,html
,js
,json
我希望将它们转换为:
text/css
,text/html
,text/javascript
,application/json
我想在红宝石中实现这一点。
所以写完之后:
ext_to_mime("css")
我应该得到:
text/css
如果有任何宝石,也欢迎他们。
答案 0 :(得分:10)
您可以使用mime-types
gem:
puts MIME::Types.type_for('css')
=> [text/css]
答案 1 :(得分:4)
您可以使用哈希来映射自定义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
它会提供您想要的输出。
干杯!!
答案 2 :(得分:1)
如果您只有四种文件类型,并且其中三种映射到相同的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检查文件的magic number模仿或包装它。你的里程会有所不同。