2014-05-13 72 views
0

我有以下代碼,我想下載不同MIME類型的文件。即docx,pdf等。我已經定義了我的下載動作,然後在下面試圖獲取我指向正確的mimetype的文件擴展名。但這似乎不起作用如何用send_file命令下載具有不同擴展名的文件

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 

但這似乎不工作,我哪裏錯了?請幫助

+0

你得到任何錯誤略有變化這個問題? – Pavan

+0

沒有錯誤,所有的下載只需要應用程序/八位字節流,而不管其超時情況如何 –

+0

目前您正在上傳哪種類型的文件? – Pavan

回答

0

我解決了通過使在def file_extension

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 

我改變了這部分ext = File.extname(@uploadedfile.name)ext = File.extname("#{up.upload_file}")其中up = Uploadedfile.find(params[:id])

1

下面是我如何做到這一點。

在配置/初始化/ 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" 
} 

在LIB/core_extensions.rb - 這需要在你的配置需要的地方。

class File 
    def self.guess_filetype(filename) 
    `file --mime -b "#{filename}"`.split(";").first || MIME_TYPES_FROM_EXTENSION[File.extname(filename)] 
    end 
end 

最後,在控制器中,使用例如,在由send_file呼叫,我會做

:type=> File.guess_filetype(@uploadedfile.name) 

的guess_filetype方法使一個殼呼叫file,這是一個命令行實用程序。 http://en.wikipedia.org/wiki/File_(command)

如果file無法獲得mimetype(它通常會這樣做,它非常好),然後我回到我的擴展名爲已知MIME類型的大量列表中,存儲在該常量中。

我之所以這樣做file第一,而不是僅僅依靠擴展名列表上,是file在文件自身的實際內容裏面,所以如果有人改名文件的擴展名,file不會上當:它仍然會知道什麼MIME類型返回。

+0

您似乎擁有所有可用的MIME類型。這真是太棒了:) – Pavan

+0

我確實調用了'class File def self.guess_filetype(filename) 'file --mime -b「#{filename}」'.split(「;」)。 MIME_TYPES_FROM_EXTENSION [File.extname(filename)] end end' in'enviroment.rb'其他文件類型似乎工作正常; pdf,jpeg,但doc和docx,xl​​s不工作。我錯過了什麼? –

+0

MIME_TYPES_FROM_EXTENSION [File.extname(文件名)]似乎不工作,我試圖單獨使用它,我得到一個錯誤':鍵入選項要求' –

相關問題