fileupload做ajax非同步上傳檔案詳解

來源:互聯網
上載者:User
fileupload是一個jquery下的ajax檔案上傳外掛程式 

下載下來的包東西很多,很多也是沒必要的,這裡只談談最小層級的應用 

首先,依賴js: 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.iframe-transport.js"></script>
<script src="js/jquery.fileupload.js"></script> 複製代碼 缺一不可(如果已經引入jquery-ui包則jquery.ui.wiget.js不需要再次引入) 
大部分資料其實官網上都能找到,說點官網沒有的或者說的不夠清楚的 
附上官方API:https://github.com/blueimp/jQuery-File-Upload/wiki/API 
調用方式: 
Html代碼
<input type="file" name="files" id="fileupload_input" /> 複製代碼 jsp代碼
$("#fileupload_input").fileupload({
    url:"files/upload",//檔案上傳地址,當然也可以直接寫在input的data-url屬性內
    formData:{param1:"p1",param2:"p2"},//如果需要額外添加參數可以在這裡添加
    done:function(e,result){
        //done方法就是上傳完畢的回呼函數,其他回呼函數可以自行查看api
        //注意result要和jquery的ajax的data參數區分,這個對象包含了整個請求資訊
        //返回的資料在result.result中,假設我們伺服器返回了一個json對象
        console.log(JSON.stringify(result.result));
    }
})

複製代碼



執行個體:

edit.html.erb檔案中:

       <div class="edit-avatar">
         <div class="col-lg-4 text-center">
           <div class="profile_pic_container picture-main space-sm-2 space-md-2">
             <div class="media-photo profile-pic-background">
               <img src="<%= @user.avatar_url %>" height="160" width="160" class="user-avatar">
             </div>
           </div>
         </div>
         <div class="col-lg-7">
           <div>
             <%= t("edit_your_profile.tip") %>
           </div>
           <div class="row space-top-6">
             <div class="col-sm-5 space-2">
               <button class="btn btn-default btn-bnb-black upload-avatar">
                   <%= t("edit_your_profile.upload_form_your_files") %>
                 <input id="fileupload" type="file" name="image" data-url="/host/profiles/upload_photo">
               </button>
             </div>
           </div>
         </div>

app.js檔案中:


  $('#fileupload').fileupload({
    dataType: 'json',
    done: function (e, data) {
      var avatar_url = data.result.data.profile_photo.original_url;
      $(".edit-avatar .user-avatar").attr("src", avatar_url);
    }
  });

url寫在html標籤中data-url屬性中了, 寫在這裡也可以, 相當與jquery的ajax一樣,只不過是ajax上傳檔案, 請求返回是json格式,所以controller的action執行完後返回upload_photo.json.jbuilder模板


profiles_controller.rb檔案中:


    def upload_photo
      @user = current_user
      if @user.profile_photo.present?
        @user.profile_photo.delete
      end
      @photo = @user.build_profile_photo
      @photo.update(image: params[:image])
    end


upload_photo.json.jbuilder檔案中:

json.data do
  
  json.profile_photo do
    json_photo json, @user.profile_photo.try(:image)
  end
  
end


json.meta do
  json.status response.status
end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.