附件上傳是普通項(xiàng)目里比較常見的需求踏拜,想要實(shí)現(xiàn)上傳功能鞋邑,可以自己手寫氓辣,也可以用一些比較方便使用的gem腕窥,比如本文介紹的carrierwave(一下簡稱cw)。
cw的使用方法比較簡單筛婉,能實(shí)現(xiàn)的功能也比較多簇爆,不僅僅限于上傳文件,還能對上傳的圖片格式的文件進(jìn)行進(jìn)一步的編輯處理爽撒。下面簡單介紹一下基本的使用方法:
1.安裝——gemfile里加上 gem 'carrierwave' 入蛆,然后bundle就可以了;
2.生成自己需要的uploader—— 項(xiàng)目根目錄執(zhí)行 rails g uploader Avatar硕勿,此時(shí)rails會(huì)自動(dòng)創(chuàng)建一下文件:app/uploaders/avatar_uploader.rb
3.配置該文件:編輯器中打開剛才的文件哨毁,可以配置一些參數(shù),比如:
配置存儲(chǔ)文件的類型
storage :file
配置存儲(chǔ)的路徑
def
store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
配置文件名
def
filename original_filename if original_filename
end
還有一些配置使用RMagick或者M(jìn)iniMagick來處理圖片的功能源武,建議大家可以到railscasts這個(gè)網(wǎng)站下載相關(guān)視頻看一下扼褪,這里附上直達(dá)鏈接http://railscasts.com/episodes/253-carrierwave-file-uploads
4.綁定模型里的字段——比如一個(gè)attachment模型的name字段,打開attachment.rb文件粱栖,進(jìn)行如下操作:
I.引用文件
require 'carrierwave/orm/activerecord'
II.聲明name字段與剛才生成的配置文件(其實(shí)是一個(gè)class)的綁定關(guān)系
mount_uploader :name, AvatarUploader
5.上傳文件——
attachment = Attachment.new
attachment.name = File.open('local_url')
attachment.save
就是這么簡單话浇。
如果是前端頁面里,那把name字段的錄入框設(shè)置為file即可