新聞中心
ruby on rails 多圖上傳
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),昆玉網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:昆玉等地區(qū)。昆玉做網(wǎng)站價(jià)格咨詢:18982081108
一、首先說(shuō)一下需要使用的插件以及gem包。
1.paperclip(gem,用于后臺(tái)文件處理,是一個(gè)很強(qiáng)大的工具)
2.swfupload(js/swf插件,用于前端頁(yè)面的文件選擇與提交上傳,自帶進(jìn)度條。)
二、運(yùn)行環(huán)境
1.ruby 1.9.3-p194
2.rails 3.2
三、準(zhǔn)備工作。
首先在項(xiàng)目中安裝用于處理上傳文件的包,或者工具。(當(dāng)然這個(gè)也可以自己手寫。)我這里使用的是paperclip,可以在rubygems.org這里搜索找到詳細(xì)的使用方法以及安裝過(guò)程。
然后我們?cè)诰W(wǎng)站http://code.google.com/p/swfupload/中可以下載swfupload工具。在這個(gè)下載的包中我們可以看到有幾個(gè)我們需要用到的包,swfupload.js、swfupload.queue.js、swfupload.swfobject.js、
handlers.js、fileprogress.js,以及swfupload.swf文件。其中js文件可以放到assets/javascript下,swf文件可以在assets下新建一個(gè)文件夾存放。
準(zhǔn)備工作到這里就完成了。
四、使用步驟。
1.首先在views/demo.html.erb中加入js代碼。
- var swfu;
- window.onload = function() {
- var settings = {
- flash_url : "/assets/swfupload.swf",//存放swf文件的地址
- upload_url: "swfuploadfile.js",//文件上傳路徑。這里.js意思是,以js方式訪問(wèn)。
- post_params: {"utf8":"✓","authenticity_token" : "<%= form_authenticity_token %>"},//跟隨上傳文件一起的附帶參數(shù)<'paramsName','paramsValue'>
- file_size_limit : "100 MB",
- file_types : "*.png;*.jpg;*.jpeg,*.pjpeg;*.bmp;*.gif",
- file_types_description : "All Files",
- file_upload_limit : 100,
- file_queue_limit : 0,
- custom_settings : {
- progressTarget : "fsUploadProgress",
- cancelButtonId : "btnCancel"
- },
- debug: false,
- // Button settings 上傳按鈕的設(shè)置 其實(shí)就是初始化swf文件
- button_p_w_picpath_url: "/assets/swfupload_button_back.png",//swf文件的背景
- button_width: "96",
- button_height: "32",
- button_placeholder_id: "spanButtonPlaceHolder",
- button_text: '',
- button_text_style: ".theFont { font-size: 14;color:#000000; font-}",
- button_text_left_padding: 12,
- button_text_top_padding: 3,
- // The event handler functions are defined in handlers.js
- file_queued_handler : fileQueued,
- file_queue_error_handler : fileQueueError,
- file_dialog_complete_handler : fileDialogComplete,
- upload_start_handler : uploadStart,
- upload_progress_handler : uploadProgress,
- upload_error_handler : uploadError,
- upload_success_handler : successUpload,//主要用到這里的成功回調(diào) 可以自己寫回調(diào)方法,這個(gè)就是我加的。
- upload_complete_handler : uploadComplete,
- queue_complete_handler : queueComplete // Queue plugin event
- };
- swfu = new SWFUpload(settings);
- };
//上傳成功后回調(diào)的方法
- function successUpload(file, serverData){
- //它自己原有的方法是在handler.js中可以看一下。
- //可以看到有一個(gè)file以及sercerData的參數(shù),這個(gè)是成功后自動(dòng)給你返回的。具體從哪里給你返回的看下面。
然后在頁(yè)面中加入:
//上傳按鈕以及全部取消按鈕
之后再加入(前一句是顯示上傳的過(guò)程,包括進(jìn)度條。后面一句是上傳狀態(tài),成功 或者失敗。)
到這里前端頁(yè)面的配置基本完成。
然后再到controller里面看一下。因?yàn)樵谇懊媾渲玫臅r(shí)候是以js方式訪問(wèn),所以返回也是以js的方式返回。
- def swfuploadfile
- respond_to do |format|
- format.js
- end
- end
接著,再到views/里面跟你的demo.html.erb同級(jí)。新建文件swfuploadfile.js.erb
這個(gè)文件名字要跟controller里的方法名稱一致。
然后在swfuploadfile.js.erb中寫你要做的操作,這個(gè)文件里面的內(nèi)容就是上面js中serverData返回的數(shù)據(jù)。
完美完成?,F(xiàn)在可以試試了。
還有不明白的或者寫的不到位的,留言告訴我吧。
網(wǎng)頁(yè)名稱:rubyonrails多圖上傳
分享鏈接:http://fisionsoft.com.cn/article/gsdgsg.html