ruby on rails 多圖上傳

 

ruby on rails 多圖上傳

一、首先說一下需要使用的插件以及gem包。

1.paperclip(gem,用於後臺文件處理,是一個很強大的工具)

2.swfupload(js/swf插件,用於前端頁面的文件選擇與提交上傳,自帶進度條。)

二、運行環境

1.ruby 1.9.3-p194

2.rails 3.2

三、準備工作。

首先在項目中安裝用於處理上傳文件的包,或者工具。(當然這個也可以自己手寫。)我這裏使用的是paperclip,可以在rubygems.org這裏搜索找到詳細的使用方法以及安裝過程。

然後我們在網站http://code.google.com/p/swfupload/中可以下載swfupload工具。在這個下載的包中我們可以看到有幾個我們需要用到的包,swfupload.js、swfupload.queue.js、swfupload.swfobject.js、

handlers.js、fileprogress.js,以及swfupload.swf文件。其中js文件可以放到assets/javascript下,swf文件可以在assets下新建一個文件夾存放。

準備工作到這裏就完成了。

四、使用步驟。

1.首先在views/demo.html.erb中加入js代碼。

 

  1. var swfu; 
  2.  
  3. window.onload = function() { 
  4.  
  5.    var settings = { 
  6.  
  7.         flash_url : "/assets/swfupload.swf",//存放swf文件的地址 
  8.  
  9.         upload_url: "swfuploadfile.js",//文件上傳路徑。這裏.js意思是,以js方式訪問。 
  10.  
  11.         post_params: {"utf8":"✓","authenticity_token" : "<%= form_authenticity_token %>"},//跟隨上傳文件一起的附帶參數<'paramsName','paramsValue'> 
  12.  
  13.         file_size_limit : "100 MB"
  14.  
  15.         file_types : "*.png;*.jpg;*.jpeg,*.pjpeg;*.bmp;*.gif"
  16.  
  17.         file_types_description : "All Files"
  18.  
  19.         file_upload_limit : 100, 
  20.  
  21.         file_queue_limit : 0, 
  22.  
  23.         custom_settings : { 
  24.  
  25.             progressTarget : "fsUploadProgress"
  26.  
  27.             cancelButtonId : "btnCancel" 
  28.  
  29.         }, 
  30.  
  31.         debug: false
  32.  
  33.  
  34.  
  35.         // Button settings 上傳按鈕的設置 其實就是初始化swf文件 
  36.  
  37.         button_image_url: "/assets/swfupload_button_back.png",//swf文件的背景 
  38.  
  39.         button_width: "96"
  40.  
  41.         button_height: "32"
  42.  
  43.         button_placeholder_id: "spanButtonPlaceHolder"
  44.  
  45.         button_text: '<span class="theFont"></span>'
  46.  
  47.         button_text_style: ".theFont { font-size: 14;color:#000000; font-}"
  48.  
  49.         button_text_left_padding: 12, 
  50.  
  51.         button_text_top_padding: 3, 
  52.  
  53.          
  54.  
  55.         // The event handler functions are defined in handlers.js 
  56.  
  57.         file_queued_handler : fileQueued, 
  58.  
  59.         file_queue_error_handler : fileQueueError, 
  60.  
  61.         file_dialog_complete_handler : fileDialogComplete, 
  62.  
  63.         upload_start_handler : uploadStart, 
  64.  
  65.         upload_progress_handler : uploadProgress, 
  66.  
  67.         upload_error_handler : uploadError, 
  68.  
  69.         upload_success_handler : successUpload,//主要用到這裏的成功回調 可以自己寫回調方法,這個就是我加的。 
  70.  
  71.         upload_complete_handler : uploadComplete, 
  72.  
  73.         queue_complete_handler : queueComplete  // Queue plugin event 
  74.  
  75.     }; 
  76.  
  77.     swfu = new SWFUpload(settings); 
  78.  
  79.  }; 

 

 //上傳成功後回調的方法

  1. function successUpload(file, serverData){ 
  2.  
  3. //它自己原有的方法是在handler.js中可以看一下。 
  4.  
  5. //可以看到有一個file以及sercerData的參數,這個是成功後自動給你返回的。具體從哪裏給你返回的看下面。 

然後在頁面中加入:

//上傳按鈕以及全部取消按鈕

  1. <span id="spanButtonPlaceHolder"></span> 
  2. <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" class="show_none" /> 

之後再加入(前一句是顯示上傳的過程,包括進度條。後面一句是上傳狀態,成功 或者失敗。)

 

  1. <div class="fieldset flash" id="fsUploadProgress"></div> 
  2.  
  3. <div id="divStatus" class="show_none"></div> 

 

  到這裏前端頁面的配置基本完成。

  然後再到controller裏面看一下。因爲在前面配置的時候是以js方式訪問,所以返回也是以js的方式返回。

 

  1. def swfuploadfile 
  2.     respond_to do |format| 
  3.     format.js 
  4.     end 
  5. end 

 

  接着,再到views/裏面跟你的demo.html.erb同級。新建文件swfuploadfile.js.erb

  這個文件名字要跟controller裏的方法名稱一致。

  然後在swfuploadfile.js.erb中寫你要做的操作,這個文件裏面的內容就是上面js中serverData返回的數據。

 

  完美完成。現在可以試試了。

還有不明白的或者寫的不到位的,留言告訴我吧。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章