ruby on rails 文件、图片上传

运行环境,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.最后将文件路径存到数据库里方便前台页面展示

猜你喜欢

转载自liguangsong.iteye.com/blog/2216802