运行环境,Mac 、ubuntu
rails 4.2.1
以前做过几次图片,文件上传的功能,但是每次做的时候都要重新想怎么做,汗。。。,还是记下来吧。
其他主流上传gem包carrierwave和paperclip
1.在页面添加form表单上传图片或者文件
=form_for :file ,:url=> '/add_excel' do |f| =f.file_field :file , :accept => '.docx .txt' =f.submit
在:accept 中可以指定上传文件的类型,不符合后缀名的文件不可以上传,可以制定多个
2.在contrller 里获取文件的拓展名
File.extname(params[:file][:file].original_filename)
这里嵌套有点深,而且original_filename不能用[: original_filename]获取,因为params的数据是这样的。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZzuhBoEuOH1i4Gp68GrVe57uA3X0dmhMH4SjanDuTJ3TMUbOJhld1+pD7JXtt7urTQUfrdruoTuwrcQZcWWBpw==", "file"=>{"file"=>#<ActionDispatch::Http::UploadedFile:0x007fc009933ac0 @tempfile=#<Tempfile:/var/folders/ks/tln9bzyj1j15m12mpvtq54wc0000gn/T/RackMultipart20150603-56080-cj4lsy.docx>, @original_filename="“吃货”游戏PRD(5月19).docx", @content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", @headers="Content-Disposition: form-data; name=\"file[file]\"; filename=\"\xE2\x80\x9C\xE5\x90\x83\xE8\xB4\xA7\xE2\x80\x9D\xE6\xB8\xB8\xE6\x88\x8FPRD\xEF\xBC\x885\xE6\x9C\x8819\xEF\xBC\x89.docx\"\r\nContent-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document\r\n">}, "commit"=>"Save File"}
3. 将文件的内容读出来
content = params[:file][:file].read
4.把读出来的文件内容写入到指定的文件里
File.open(file_path,'wb+') do |item| item.write(content) end
拼接路径时注意把2.取到的扩展名添加上
如果文件不存在File.open会先创建再打开
5.最后将文件路径存到数据库里方便前台页面展示