how to download files with different extension with send_file command - ruby-on-rails

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])

Related

Elfinder Rails and Amazon S3

I am using Elfinder Rails for Media Manger in my application. I am working on to store the media files to Amazon S3 storage. I try to use the gem el_finder_s3. I created bucket and provided all the configurations like.
def elfinder
ElFinderS3::Connector.new(
:mime_handler => ElFinderS3::MimeType,
:root => '/',
:url => 's3.ap-southeast-1.amazonaws.com',
:thumbs => true,
:thumbs_size => 100,
:thumbs_directory => 'thumbs',
:home => t('admin.media.home'),
:original_filename_method => lambda { |file| "#{File.basename(file.original_filename, File.extname(file.original_filename)).parameterize}#{File.extname(file.original_filename)}" },
:default_perms => {:read => true, :write => true, :rm => true, :hidden => false},
:server => {
:bucket_name => 'bucket_name',
:region => 'ap-southeast-1',
:access_key_id => 'acces_key',
:secret_access_key => 'secret_key',
:cdn_base_path => 's3.ap-southeast-1.amazonaws.com'
}
).run(params)
end
Rails application is connect with S3 but elfinder doesn't show the file contents. I checked the bucket, thumb folder was created but elfinder was unable to load the contents.
Please help me to fix it.
It is fixed with the update of the above script. Here is the updated script.
def elfinder
h, r = ElFinderS3::Connector.new(
:mime_handler => ElFinderS3::MimeType,
:root => '/',
:url => 's3.ap-southeast-1.amazonaws.com',
:thumbs => true,
:thumbs_size => 100,
:thumbs_directory => 'thumbs',
:home => t('admin.media.home'),
:original_filename_method => lambda { |file| "#{File.basename(file.original_filename, File.extname(file.original_filename)).parameterize}#{File.extname(file.original_filename)}" },
:default_perms => {:read => true, :write => true, :rm => true, :hidden => false},
:server => {
:bucket_name => 'bucket_name',
:region => 'ap-southeast-1',
:access_key_id => 'acces_key',
:secret_access_key => 'secret_key',
:cdn_base_path => 's3.ap-southeast-1.amazonaws.com'
}
).run(params)
headers.merge!(h)
if r.empty?
(render :nothing => true) and return
end
render :json => r, :layout => false
end

i can not upload video in background with delayed_job on heroku?

I used paperclip background process with delay jobs with ffmpeg.
In paperclip processors folder i have ffmpeg.rb file also.
my model
class product < ActiveRecord::Base
has_attached_file :video, :styles => {
:mp4video => { :geometry => "640x480", :format => 'mp4', :convert_options => {:output => {:ar => 44100}} },
:webmvideo =>{ :geometry => "1024x576", :format => 'webm', :convert_options => {:output => {:ar => 44100}} },
:oggvideo => { :geometry => "1024x576", :format => 'ogg', :convert_options => {:output => {:ar => 44100}} },
:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10 }
},
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/aws.yml",
:processors => [:transcoder]
process_in_background :video
end

Ruby on Rails condition on a hash

Can anyone help me with a bit of code:), I have the fallowing hash
selector = {
:fields => ['Id'],
:predicates => [
{:field => 'grpId', :operator => 'EQUALS', :values => [params_id]},
{:field => 'CrType', :operator => 'EQUALS', :values => ['KEYWORD']}
]
}
And I would like to create a condition for this line:
{:field => 'grpId', :operator => 'EQUALS', :values => [params_id]},
to be performed only if the params_id is not empty.
Thank you
selector = {
:fields => ['Id'],
:predicates => [
params_id ? {:field => 'grpId', :operator => 'EQUALS', :values => [params_id]} : nil,
{:field => 'CrType', :operator => 'EQUALS', :values => ['KEYWORD']}
].compact
}

Rails 3.1 - Split Column on Data import?

I'm importing sales data from iTunes successfully using:
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => row_data[26],
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
'vendor_order_code' however contains values like '0711297494143_CADE70900648' that i'd like to split on the underscore and store in two separate (new) columns. Not all entries have a value like this, some just contain the first part (a UPC). I realise there are already UPC and ISRC columns provided but these aren't populated in a way that's useful to me, splitting the vendor_order_code is the only way I can do what I need to do.
Can anyone suggest the correct way of doing this? I know the below is complete nonsense, but i'm thinking something along the lines of:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_")...and save just the first half regardless of whether split occurred.
'vendor_order_code_ISRC' => row_data[26].split("_")..and save just the second half if it exists
No need for multiple splits and/or conditionals; just match once per row.
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
full, upc, _discard, isrc = row_data[26].match(/^([^_]+)(_(.+))?/).to_a
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => full,
'vendor_order_code_UPC' => upc,
'vendor_order_code_ISRC' => isrc,
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
You can try:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_").first
'vendor_order_code_ISRC' => row_data[26].split("_").last if row_data[26].match(/_/)

Pass different class name

I do have the following form:
'region' => new sfWidgetFormChoice(array('expanded' => true,'choices' => $region))
I get the folloing html.
<ul class="radio_list">
<li> first...
<li> second....
I want to change the name of class in the table. It shouldn't be radio_list. I want to name it by my own?
How can I do it in 'region'?
Following is not working and changes the classes of <li>:
'region' => new sfWidgetFormChoice(array('expanded' => true,'choices' => $region), array('class' => 'your_class'))
Thanks!
Gunnar
This is my complete Widget:
$this->setWidgets(array(
'recipename' => new sfWidgetFormInputText(array(), array('size' => '40', 'maxlength' => '150')),
'description' => new sfWidgetFormInputText(array(), array('size' => '40', 'maxlength' => '100')),
'ingredients' => new sfWidgetFormTextarea(array(), array('rows' => '10', 'cols' => '35')),
'preparation' => new sfWidgetFormTextarea(array(), array('rows' => '10', 'cols' => '35')),
'kis' => new sfWidgetFormChoice(array('expanded' => true, 'choices' => $kis)),
'category' => new sfWidgetFormChoice(array('expanded' => true, 'choices' => $category)),
'region' => new sfWidgetFormChoice(array('expanded' => true, 'choices' => $region)),
));
You need to use renderer_options for that, since sfWidgetFormSelectRadio overrides passed attribute with it's own option.
new sfWidgetFormChoice(array(
'expanded' => true,
'choices' => $region,
'renderer_options' => array(
'class' => 'your_class'
)
);

Resources