I have the following code, I want to download files of different mime types. Ie docx, pdf etc. I have defined my download action, then bellow am trying to get the file extension for which i direct it to the correct mimetype. But this doesnot seem to work
def download
#uploadedfile = Uploadedfile.find(params[:id])
send_data(
#uploadedfile.upload_file.path,
:filename => #uploadedfile.name,
# :type => 'application/pdf',
# :type=>"*/*",
# :type=> "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
#:type=> MIME::Types.type_for(#uploadedfile.name).to_s,
#:content_type => %w(application/vnd.openxmlformats-officedocument.wordprocessingml.document application/pdf),
:type=> file_extension,
:stream => true,
:x_sendfile=>true,
:url_based_filename => true
)
flash[:notice] = "The file has been downloaded"
end
def file_extension
#uploadedfile = Uploadedfile.find(params[:id])
# ext = File.extname("#{#uploadedfile.name}")
ext = File.extname(#uploadedfile.name)
if (ext == ".pdf")
content_type = "application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
content_type = "text/Plain"
elsif (ext == ".rar")
content_type = "Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
content_type = "image/jpeg"
else
content_type = "Application/octet-stream"
end
content_type
end
but this seems not to work, where am i going wrong? Please help
Here's how i do this.
In config/initializers/constants.rb
MIME_TYPES_FROM_EXTENSION = {
".3dm" => "x-world/x-3dmf",
".3dmf" => "x-world/x-3dmf",
".a" => "application/octet-stream",
".aab" => "application/x-authorware-bin",
".aam" => "application/x-authorware-map",
".aas" => "application/x-authorware-seg",
".abc" => "text/vnd.abc",
".acgi" => "text/html",
".afl" => "video/animaflex",
".ai" => "application/postscript",
".aif" => "audio/aiff",
".aif" => "audio/x-aiff",
".aifc" => "audio/aiff",
".aifc" => "audio/x-aiff",
".aiff" => "audio/aiff",
".aiff" => "audio/x-aiff",
".aim" => "application/x-aim",
".aip" => "text/x-audiosoft-intra",
".ani" => "application/x-navi-animation",
".aos" => "application/x-nokia-9000-communicator-add-on-software",
".aps" => "application/mime",
".arc" => "application/octet-stream",
".arj" => "application/arj",
".arj" => "application/octet-stream",
".art" => "image/x-jg",
".asf" => "video/x-ms-asf",
".asm" => "text/x-asm",
".asp" => "text/asp",
".asx" => "application/x-mplayer2",
".asx" => "video/x-ms-asf",
".asx" => "video/x-ms-asf-plugin",
".au" => "audio/basic",
".au" => "audio/x-au",
".avi" => "application/x-troff-msvideo",
".avi" => "video/avi",
".avi" => "video/msvideo",
".avi" => "video/x-msvideo",
".avs" => "video/avs-video",
".bcpio" => "application/x-bcpio",
".bin" => "application/mac-binary",
".bin" => "application/macbinary",
".bin" => "application/octet-stream",
".bin" => "application/x-binary",
".bin" => "application/x-macbinary",
".bm" => "image/bmp",
".bmp" => "image/bmp",
".bmp" => "image/x-windows-bmp",
".boo" => "application/book",
".book" => "application/book",
".boz" => "application/x-bzip2",
".bsh" => "application/x-bsh",
".bz" => "application/x-bzip",
".bz2" => "application/x-bzip2",
".c" => "text/plain",
".c" => "text/x-c",
".c++" => "text/plain",
".cat" => "application/vnd.ms-pki.seccat",
".cc" => "text/plain",
".cc" => "text/x-c",
".ccad" => "application/clariscad",
".cco" => "application/x-cocoa",
".cdf" => "application/cdf",
".cdf" => "application/x-cdf",
".cdf" => "application/x-netcdf",
".cer" => "application/pkix-cert",
".cer" => "application/x-x509-ca-cert",
".cha" => "application/x-chat",
".chat" => "application/x-chat",
".class" => "application/java",
".class" => "application/java-byte-code",
".class" => "application/x-java-class",
".com" => "application/octet-stream",
".com" => "text/plain",
".conf" => "text/plain",
".cpio" => "application/x-cpio",
".cpp" => "text/x-c",
".cpt" => "application/mac-compactpro",
".cpt" => "application/x-compactpro",
".cpt" => "application/x-cpt",
".crl" => "application/pkcs-crl",
".crl" => "application/pkix-crl",
".crt" => "application/pkix-cert",
".crt" => "application/x-x509-ca-cert",
".crt" => "application/x-x509-user-cert",
".csh" => "application/x-csh",
".csh" => "text/x-script.csh",
".css" => "application/x-pointplus",
".css" => "text/css",
".cxx" => "text/plain",
".dcr" => "application/x-director",
".deepv" => "application/x-deepv",
".def" => "text/plain",
".der" => "application/x-x509-ca-cert",
".dif" => "video/x-dv",
".dir" => "application/x-director",
".dl" => "video/dl",
".dl" => "video/x-dl",
".doc" => "application/msword",
".dot" => "application/msword",
".dp" => "application/commonground",
".drw" => "application/drafting",
".dump" => "application/octet-stream",
".dv" => "video/x-dv",
".dvi" => "application/x-dvi",
".dwf" => "drawing/x-dwf (old)",
".dwf" => "model/vnd.dwf",
".dwg" => "application/acad",
".dwg" => "image/vnd.dwg",
".dwg" => "image/x-dwg",
".dxf" => "application/dxf",
".dxf" => "image/vnd.dwg",
".dxf" => "image/x-dwg",
".dxr" => "application/x-director",
".el" => "text/x-script.elisp",
".elc" => "application/x-bytecode.elisp (compiled elisp)",
".elc" => "application/x-elc",
".env" => "application/x-envoy",
".eps" => "application/postscript",
".es" => "application/x-esrehber",
".etx" => "text/x-setext",
".evy" => "application/envoy",
".evy" => "application/x-envoy",
".exe" => "application/octet-stream",
".f" => "text/plain",
".f" => "text/x-fortran",
".f77" => "text/x-fortran",
".f90" => "text/plain",
".f90" => "text/x-fortran",
".fdf" => "application/vnd.fdf",
".fif" => "application/fractals",
".fif" => "image/fif",
".fli" => "video/fli",
".fli" => "video/x-fli",
".flo" => "image/florian",
".flx" => "text/vnd.fmi.flexstor",
".fmf" => "video/x-atomic3d-feature",
".for" => "text/plain",
".for" => "text/x-fortran",
".fpx" => "image/vnd.fpx",
".fpx" => "image/vnd.net-fpx",
".frl" => "application/freeloader",
".funk" => "audio/make",
".g" => "text/plain",
".g3" => "image/g3fax",
".gif" => "image/gif",
".gl" => "video/gl",
".gl" => "video/x-gl",
".gsd" => "audio/x-gsm",
".gsm" => "audio/x-gsm",
".gsp" => "application/x-gsp",
".gss" => "application/x-gss",
".gtar" => "application/x-gtar",
".gz" => "application/x-compressed",
".gz" => "application/x-gzip",
".gzip" => "application/x-gzip",
".gzip" => "multipart/x-gzip",
".h" => "text/plain",
".h" => "text/x-h",
".hdf" => "application/x-hdf",
".help" => "application/x-helpfile",
".hgl" => "application/vnd.hp-hpgl",
".hh" => "text/plain",
".hh" => "text/x-h",
".hlb" => "text/x-script",
".hlp" => "application/hlp",
".hlp" => "application/x-helpfile",
".hlp" => "application/x-winhelp",
".hpg" => "application/vnd.hp-hpgl",
".hpgl" => "application/vnd.hp-hpgl",
".hqx" => "application/binhex",
".hqx" => "application/binhex4",
".hqx" => "application/mac-binhex",
".hqx" => "application/mac-binhex40",
".hqx" => "application/x-binhex40",
".hqx" => "application/x-mac-binhex40",
".hta" => "application/hta",
".htc" => "text/x-component",
".htm" => "text/html",
".html" => "text/html",
".htmls" => "text/html",
".htt" => "text/webviewhtml",
".htx" => "text/html",
".ice" => "x-conference/x-cooltalk",
".ico" => "image/x-icon",
".idc" => "text/plain",
".ief" => "image/ief",
".iefs" => "image/ief",
".iges" => "application/iges",
".iges" => "model/iges",
".igs" => "application/iges",
".igs" => "model/iges",
".ima" => "application/x-ima",
".imap" => "application/x-httpd-imap",
".inf" => "application/inf",
".ins" => "application/x-internett-signup",
".ip" => "application/x-ip2",
".isu" => "video/x-isvideo",
".it" => "audio/it",
".iv" => "application/x-inventor",
".ivr" => "i-world/i-vrml",
".ivy" => "application/x-livescreen",
".jam" => "audio/x-jam",
".jav" => "text/plain",
".jav" => "text/x-java-source",
".java" => "text/plain",
".java" => "text/x-java-source",
".jcm" => "application/x-java-commerce",
".jfif" => "image/jpeg",
".jfif" => "image/pjpeg",
".jfif-tbnl" => "image/jpeg",
".jpe" => "image/jpeg",
".jpe" => "image/pjpeg",
".jpeg" => "image/jpeg",
".jpeg" => "image/pjpeg",
".jpg" => "image/jpeg",
".jpg" => "image/pjpeg",
".jps" => "image/x-jps",
".js" => "application/x-javascript",
".jut" => "image/jutvision",
".kar" => "audio/midi",
".kar" => "music/x-karaoke",
".ksh" => "application/x-ksh",
".ksh" => "text/x-script.ksh",
".la" => "audio/nspaudio",
".la" => "audio/x-nspaudio",
".lam" => "audio/x-liveaudio",
".latex" => "application/x-latex",
".lha" => "application/lha",
".lha" => "application/octet-stream",
".lha" => "application/x-lha",
".lhx" => "application/octet-stream",
".list" => "text/plain",
".lma" => "audio/nspaudio",
".lma" => "audio/x-nspaudio",
".log" => "text/plain",
".lsp" => "application/x-lisp",
".lsp" => "text/x-script.lisp",
".lst" => "text/plain",
".lsx" => "text/x-la-asf",
".ltx" => "application/x-latex",
".lzh" => "application/octet-stream",
".lzh" => "application/x-lzh",
".lzx" => "application/lzx",
".lzx" => "application/octet-stream",
".lzx" => "application/x-lzx",
".m" => "text/plain",
".m" => "text/x-m",
".m1v" => "video/mpeg",
".m2a" => "audio/mpeg",
".m2v" => "video/mpeg",
".m3u" => "audio/x-mpequrl",
".man" => "application/x-troff-man",
".map" => "application/x-navimap",
".mar" => "text/plain",
".mbd" => "application/mbedlet",
".mc$" => "application/x-magic-cap-package-1.0",
".mcd" => "application/mcad",
".mcd" => "application/x-mathcad",
".mcf" => "image/vasa",
".mcf" => "text/mcf",
".mcp" => "application/netmc",
".me" => "application/x-troff-me",
".mht" => "message/rfc822",
".mhtml" => "message/rfc822",
".mid" => "application/x-midi",
".mid" => "audio/midi",
".mid" => "audio/x-mid",
".mid" => "audio/x-midi",
".mid" => "music/crescendo",
".mid" => "x-music/x-midi",
".midi" => "application/x-midi",
".midi" => "audio/midi",
".midi" => "audio/x-mid",
".midi" => "audio/x-midi",
".midi" => "music/crescendo",
".midi" => "x-music/x-midi",
".mif" => "application/x-frame",
".mif" => "application/x-mif",
".mime" => "message/rfc822",
".mime" => "www/mime",
".mjf" => "audio/x-vnd.audioexplosion.mjuicemediafile",
".mjpg" => "video/x-motion-jpeg",
".mm" => "application/base64",
".mm" => "application/x-meme",
".mme" => "application/base64",
".mod" => "audio/mod",
".mod" => "audio/x-mod",
".moov" => "video/quicktime",
".mov" => "video/quicktime",
".movie" => "video/x-sgi-movie",
".mp2" => "audio/mpeg",
".mp2" => "audio/x-mpeg",
".mp2" => "video/mpeg",
".mp2" => "video/x-mpeg",
".mp2" => "video/x-mpeq2a",
".mp3" => "audio/mpeg3",
".mp3" => "audio/x-mpeg-3",
".mp3" => "video/mpeg",
".mp3" => "video/x-mpeg",
".mpa" => "audio/mpeg",
".mpa" => "video/mpeg",
".mpc" => "application/x-project",
".mpe" => "video/mpeg",
".mpeg" => "video/mpeg",
".mpg" => "audio/mpeg",
".mpg" => "video/mpeg",
".mpga" => "audio/mpeg",
".mpp" => "application/vnd.ms-project",
".mpt" => "application/x-project",
".mpv" => "application/x-project",
".mpx" => "application/x-project",
".mrc" => "application/marc",
".ms" => "application/x-troff-ms",
".mv" => "video/x-sgi-movie",
".my" => "audio/make",
".mzz" => "application/x-vnd.audioexplosion.mzz",
".nap" => "image/naplps",
".naplps" => "image/naplps",
".nc" => "application/x-netcdf",
".ncm" => "application/vnd.nokia.configuration-message",
".nif" => "image/x-niff",
".niff" => "image/x-niff",
".nix" => "application/x-mix-transfer",
".nsc" => "application/x-conference",
".nvd" => "application/x-navidoc",
".o" => "application/octet-stream",
".oda" => "application/oda",
".omc" => "application/x-omc",
".omcd" => "application/x-omcdatamaker",
".omcr" => "application/x-omcregerator",
".p" => "text/x-pascal",
".p10" => "application/pkcs10",
".p10" => "application/x-pkcs10",
".p12" => "application/pkcs-12",
".p12" => "application/x-pkcs12",
".p7a" => "application/x-pkcs7-signature",
".p7c" => "application/pkcs7-mime",
".p7c" => "application/x-pkcs7-mime",
".p7m" => "application/pkcs7-mime",
".p7m" => "application/x-pkcs7-mime",
".p7r" => "application/x-pkcs7-certreqresp",
".p7s" => "application/pkcs7-signature",
".part" => "application/pro_eng",
".pas" => "text/pascal",
".pbm" => "image/x-portable-bitmap",
".pcl" => "application/vnd.hp-pcl",
".pcl" => "application/x-pcl",
".pct" => "image/x-pict",
".pcx" => "image/x-pcx",
".pdb" => "chemical/x-pdb",
".pdf" => "application/pdf",
".pfunk" => "audio/make",
".pfunk" => "audio/make.my.funk",
".pgm" => "image/x-portable-graymap",
".pgm" => "image/x-portable-greymap",
".pic" => "image/pict",
".pict" => "image/pict",
".pkg" => "application/x-newton-compatible-pkg",
".pko" => "application/vnd.ms-pki.pko",
".pl" => "text/plain",
".pl" => "text/x-script.perl",
".plx" => "application/x-pixclscript",
".pm" => "image/x-xpixmap",
".pm" => "text/x-script.perl-module",
".pm4" => "application/x-pagemaker",
".pm5" => "application/x-pagemaker",
".png" => "image/png",
".pnm" => "application/x-portable-anymap",
".pnm" => "image/x-portable-anymap",
".pot" => "application/mspowerpoint",
".pot" => "application/vnd.ms-powerpoint",
".pov" => "model/x-pov",
".ppa" => "application/vnd.ms-powerpoint",
".ppm" => "image/x-portable-pixmap",
".pps" => "application/mspowerpoint",
".pps" => "application/vnd.ms-powerpoint",
".ppt" => "application/mspowerpoint",
".ppt" => "application/powerpoint",
".ppt" => "application/vnd.ms-powerpoint",
".ppt" => "application/x-mspowerpoint",
".ppz" => "application/mspowerpoint",
".pre" => "application/x-freelance",
".prt" => "application/pro_eng",
".ps" => "application/postscript",
".psd" => "application/octet-stream",
".pvu" => "paleovu/x-pv",
".pwz" => "application/vnd.ms-powerpoint",
".py" => "text/x-script.phyton",
".pyc" => "applicaiton/x-bytecode.python",
".qcp" => "audio/vnd.qcelp",
".qd3" => "x-world/x-3dmf",
".qd3d" => "x-world/x-3dmf",
".qif" => "image/x-quicktime",
".qt" => "video/quicktime",
".qtc" => "video/x-qtc",
".qti" => "image/x-quicktime",
".qtif" => "image/x-quicktime",
".ra" => "audio/x-pn-realaudio",
".ra" => "audio/x-pn-realaudio-plugin",
".ra" => "audio/x-realaudio",
".ram" => "audio/x-pn-realaudio",
".ras" => "application/x-cmu-raster",
".ras" => "image/cmu-raster",
".ras" => "image/x-cmu-raster",
".rast" => "image/cmu-raster",
".rexx" => "text/x-script.rexx",
".rf" => "image/vnd.rn-realflash",
".rgb" => "image/x-rgb",
".rm" => "application/vnd.rn-realmedia",
".rm" => "audio/x-pn-realaudio",
".rmi" => "audio/mid",
".rmm" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio-plugin",
".rng" => "application/ringing-tones",
".rng" => "application/vnd.nokia.ringing-tone",
".rnx" => "application/vnd.rn-realplayer",
".roff" => "application/x-troff",
".rp" => "image/vnd.rn-realpix",
".rpm" => "audio/x-pn-realaudio-plugin",
".rt" => "text/richtext",
".rt" => "text/vnd.rn-realtext",
".rtf" => "application/rtf",
".rtf" => "application/x-rtf",
".rtf" => "text/richtext",
".rtx" => "application/rtf",
".rtx" => "text/richtext",
".rv" => "video/vnd.rn-realvideo",
".s" => "text/x-asm",
".s3m" => "audio/s3m",
".saveme" => "application/octet-stream",
".sbk" => "application/x-tbook",
".scm" => "application/x-lotusscreencam",
".scm" => "text/x-script.guile",
".scm" => "text/x-script.scheme",
".scm" => "video/x-scm",
".sdml" => "text/plain",
".sdp" => "application/sdp",
".sdp" => "application/x-sdp",
".sdr" => "application/sounder",
".sea" => "application/sea",
".sea" => "application/x-sea",
".set" => "application/set",
".sgm" => "text/sgml",
".sgm" => "text/x-sgml",
".sgml" => "text/sgml",
".sgml" => "text/x-sgml",
".sh" => "application/x-bsh",
".sh" => "application/x-sh",
".sh" => "application/x-shar",
".sh" => "text/x-script.sh",
".shar" => "application/x-bsh",
".shar" => "application/x-shar",
".shtml" => "text/html",
".shtml" => "text/x-server-parsed-html",
".sid" => "audio/x-psid",
".sit" => "application/x-sit",
".sit" => "application/x-stuffit",
".skd" => "application/x-koan",
".skm" => "application/x-koan",
".skp" => "application/x-koan",
".skt" => "application/x-koan",
".sl" => "application/x-seelogo",
".smi" => "application/smil",
".smil" => "application/smil",
".snd" => "audio/basic",
".snd" => "audio/x-adpcm",
".sol" => "application/solids",
".spc" => "application/x-pkcs7-certificates",
".spc" => "text/x-speech",
".spl" => "application/futuresplash",
".spr" => "application/x-sprite",
".sprite" => "application/x-sprite",
".src" => "application/x-wais-source",
".ssi" => "text/x-server-parsed-html",
".ssm" => "application/streamingmedia",
".sst" => "application/vnd.ms-pki.certstore",
".step" => "application/step",
".stl" => "application/sla",
".stl" => "application/vnd.ms-pki.stl",
".stl" => "application/x-navistyle",
".stp" => "application/step",
".sv4cpio" => "application/x-sv4cpio",
".sv4crc" => "application/x-sv4crc",
".svf" => "image/vnd.dwg",
".svf" => "image/x-dwg",
".svr" => "application/x-world",
".svr" => "x-world/x-svr",
".swf" => "application/x-shockwave-flash",
".t" => "application/x-troff",
".talk" => "text/x-speech",
".tar" => "application/x-tar",
".tbk" => "application/toolbook",
".tbk" => "application/x-tbook",
".tcl" => "application/x-tcl",
".tcl" => "text/x-script.tcl",
".tcsh" => "text/x-script.tcsh",
".tex" => "application/x-tex",
".texi" => "application/x-texinfo",
".texinfo" => "application/x-texinfo",
".text" => "application/plain",
".text" => "text/plain",
".tgz" => "application/gnutar",
".tgz" => "application/x-compressed",
".tif" => "image/tiff",
".tif" => "image/x-tiff",
".tiff" => "image/tiff",
".tiff" => "image/x-tiff",
".tr" => "application/x-troff",
".tsi" => "audio/tsp-audio",
".tsp" => "application/dsptype",
".tsp" => "audio/tsplayer",
".tsv" => "text/tab-separated-values",
".turbot" => "image/florian",
".txt" => "text/plain",
".uil" => "text/x-uil",
".uni" => "text/uri-list",
".unis" => "text/uri-list",
".unv" => "application/i-deas",
".uri" => "text/uri-list",
".uris" => "text/uri-list",
".ustar" => "application/x-ustar",
".ustar" => "multipart/x-ustar",
".uu" => "application/octet-stream",
".uu" => "text/x-uuencode",
".uue" => "text/x-uuencode",
".vcd" => "application/x-cdlink",
".vcs" => "text/x-vcalendar",
".vda" => "application/vda",
".vdo" => "video/vdo",
".vew" => "application/groupwise",
".viv" => "video/vivo",
".viv" => "video/vnd.vivo",
".vivo" => "video/vivo",
".vivo" => "video/vnd.vivo",
".vmd" => "application/vocaltec-media-desc",
".vmf" => "application/vocaltec-media-file",
".voc" => "audio/voc",
".voc" => "audio/x-voc",
".vos" => "video/vosaic",
".vox" => "audio/voxware",
".vqe" => "audio/x-twinvq-plugin",
".vqf" => "audio/x-twinvq",
".vql" => "audio/x-twinvq-plugin",
".vrml" => "application/x-vrml",
".vrml" => "model/vrml",
".vrml" => "x-world/x-vrml",
".vrt" => "x-world/x-vrt",
".vsd" => "application/x-visio",
".vst" => "application/x-visio",
".vsw" => "application/x-visio",
".w60" => "application/wordperfect6.0",
".w61" => "application/wordperfect6.1",
".w6w" => "application/msword",
".wav" => "audio/wav",
".wav" => "audio/x-wav",
".wb1" => "application/x-qpro",
".wbmp" => "image/vnd.wap.wbmp",
".web" => "application/vnd.xara",
".wiz" => "application/msword",
".wk1" => "application/x-123",
".wmf" => "windows/metafile",
".wml" => "text/vnd.wap.wml",
".wmlc" => "application/vnd.wap.wmlc",
".wmls" => "text/vnd.wap.wmlscript",
".wmlsc" => "application/vnd.wap.wmlscriptc",
".word" => "application/msword",
".wp" => "application/wordperfect",
".wp5" => "application/wordperfect",
".wp5" => "application/wordperfect6.0",
".wp6" => "application/wordperfect",
".wpd" => "application/wordperfect",
".wpd" => "application/x-wpwin",
".wq1" => "application/x-lotus",
".wri" => "application/mswrite",
".wri" => "application/x-wri",
".wrl" => "application/x-world",
".wrl" => "model/vrml",
".wrl" => "x-world/x-vrml",
".wrz" => "model/vrml",
".wrz" => "x-world/x-vrml",
".wsc" => "text/scriplet",
".wsrc" => "application/x-wais-source",
".wtk" => "application/x-wintalk",
".xbm" => "image/x-xbitmap",
".xbm" => "image/x-xbm",
".xbm" => "image/xbm",
".xdr" => "video/x-amt-demorun",
".xgz" => "xgl/drawing",
".xif" => "image/vnd.xiff",
".xl" => "application/excel",
".xla" => "application/excel",
".xla" => "application/x-excel",
".xla" => "application/x-msexcel",
".xlb" => "application/excel",
".xlb" => "application/vnd.ms-excel",
".xlb" => "application/x-excel",
".xlc" => "application/excel",
".xlc" => "application/vnd.ms-excel",
".xlc" => "application/x-excel",
".xld" => "application/excel",
".xld" => "application/x-excel",
".xlk" => "application/excel",
".xlk" => "application/x-excel",
".xll" => "application/excel",
".xll" => "application/vnd.ms-excel",
".xll" => "application/x-excel",
".xlm" => "application/excel",
".xlm" => "application/vnd.ms-excel",
".xlm" => "application/x-excel",
".xls" => "application/excel",
".xls" => "application/vnd.ms-excel",
".xls" => "application/x-excel",
".xls" => "application/x-msexcel",
".xlt" => "application/excel",
".xlt" => "application/x-excel",
".xlv" => "application/excel",
".xlv" => "application/x-excel",
".xlw" => "application/excel",
".xlw" => "application/vnd.ms-excel",
".xlw" => "application/x-excel",
".xlw" => "application/x-msexcel",
".xm" => "audio/xm",
".xml" => "application/xml",
".xml" => "text/xml",
".xmz" => "xgl/movie",
".xpix" => "application/x-vnd.ls-xpix",
".xpm" => "image/x-xpixmap",
".xpm" => "image/xpm",
".x-png" => "image/png",
".xsr" => "video/x-amt-showrun",
".xwd" => "image/x-xwd",
".xwd" => "image/x-xwindowdump",
".xyz" => "chemical/x-pdb",
".z" => "application/x-compress",
".z" => "application/x-compressed",
".zip" => "application/x-compressed",
".zip" => "application/x-zip-compressed",
".zip" => "application/zip",
".zip" => "multipart/x-zip",
".zoo" => "application/octet-stream",
".zsh" => "text/x-script.zsh"
}
In lib/core_extensions.rb - this needs to be required somewhere in your config.
class File
def self.guess_filetype(filename)
`file --mime -b "#{filename}"`.split(";").first || MIME_TYPES_FROM_EXTENSION[File.extname(filename)]
end
end
Finally, in the controller, using your example, in the send_file call, i would do
:type=> File.guess_filetype(#uploadedfile.name)
The guess_filetype method makes a shell call to file, which is a command line utility. http://en.wikipedia.org/wiki/File_(command)
If file can't get the mimetype (it usually does, it's pretty good), then i fall back to my massive list of known mime types from extension, stored in that constant.
The reason i do file first, rather than just rely on the list of extensions, is that file looks inside the actual content of the file itself, so if somebody renamed a file's extension, file wouldn't be fooled: it would still know what mime type to return.
I solved this problem by making a slight change on the def file_extension to
def file_extension
up = Uploadedfile.find(params[:id])
ext = File.extname("#{up.upload_file}")
if (ext == ".pdf")
"application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
"text/Plain"
elsif (ext == ".rar")
"Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
"image/jpeg"
else
"Application/octet-stream"
end
end
I changed this part to ext = File.extname(#uploadedfile.name) to ext = File.extname("#{up.upload_file}") where up = Uploadedfile.find(params[:id])