簡體   English   中英

Rails 3和plupload-上傳后如何重定向?

[英]Rails 3 and plupload - how can I do redirect after upload?

當我通過以下代碼通過plupload上傳文件時,因此在Firebug控制台中,我看到消息POST / uploads 200 OK 8192ms 文字顏色為紅色。 當我看一下終端輸出時, 在7653ms內Completed 200 OK

var uploader = new plupload.Uploader({
    runtimes: 'gears,html5,flash,silverlight,browserplus',
    browse_button: 'pickfiles',    
    autostart : true,    
    max_file_size: '10mb',
    url: '/uploads',
    resize: { width: 320, height: 240, quality: 90 },
    flash_swf_url: '/Scripts/pl/plupload.flash.swf',
    silverlight_xap_url: '/Scripts/pl/plupload.silverlight.xap',
    filters: [
    { title: "Image files", extensions: "jpg,gif,png" },
    { title: "Zip files", extensions: "zip" }
]
});
uploader.bind('Init', function (up, params) {
    $('#filelist')[0].innerHTML = "<div>Current runtime: " + params.runtime + "</div>";
});
uploader.bind('Error', function (up, err) {
    $('#filelist').append("<div>Error: " + err.code +
        ", Message: " + err.message +
        (err.file ? ", File: " + err.file.name : "") +
        "</div>"
    );

});
uploader.bind('FilesAdded', function (up, files) {
    for (var i in files) {
        $('#filelist')[0].innerHTML += '<div id="' + files[i].id + '">' + files[i].name + ' (' + plupload.formatSize(files[i].size) + ') <b></b></div>';
    }
    //uploader.start();
});
$('#uploadfiles').click(function (e) {
    uploader.start();
    e.preventDefault();
});

uploader.bind('UploadProgress', function (up, file) {
    $('#' + file.id)[0].getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
});

uploader.init();

Uploads控制器中,操作創建如下:

  def create
    @upload = Upload.new(:upload => params[:file])

    if @upload.save
      head 200
      #redirect_to '/users'
    else
      render :action => "new"
    end
  end

如何重定向到任何頁面? 可以看到,在完成向頁面用戶的上傳后,我嘗試進行重定向,但是很遺憾,沒有任何反應。 如果在創建動作中是head 200 ,那么也什么也沒發生。

任何人都可以幫助我,完成上傳后如何重定向到其他頁面? 我試圖在Google上進行搜索,但找不到任何方法...

我想問你-為什么在上傳文件后,總是在Firebug控制台中顯示POST / uploads 200 OK,而沒有任何日志消息?

我可以簡單地使用window.location javascript函數來做到這一點。 Plupload有一個uploadcomplete事件,該事件在所有文件上傳完成時生成。 上傳單個文件后,將生成FileUploaded事件。 因此,如果您希望上傳多個文件,則uploadcomplete事件將很有幫助。上傳者的想法是從此處獲取的,並添加了upload complete事件。 這是我的上傳者。

<script type="text/javascript">
 $(function(){
  var uploader = new plupload.Uploader({
   runtimes : "html5",
   browse_button : 'pickfiles',
   max_file_size : '100mb',
   url : "/documents",
   multipart: true,
   multipart_params: {
   "authenticity_token" : '<%= form_authenticity_token %>'
  }
});

 uploader.bind('FilesAdded', function(up, files) {
  $.each(files, function(i, file) {
  $('#filelist').append(
    '<div id="' + file.id + '">' +
    'File: ' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>'

    );

  });


   });

  uploader.bind('UploadProgress', function(up, file) {    

$('#' + file.id + " b").html(file.percent + "%");


  });

  uploader.bind('UploadComplete', function(up, files) {
  window.location = '/documents';
 });


  $('#uploadfiles').click(function(e) {
  uploader.start();
  e.preventDefault();
  });


  uploader.init();


  });


  </script>

上傳完成后,上傳者將重定向以列出所有上傳的文檔。

兩種選擇:

1)Plupload有一個FileUploaded回調,您可以使用:

uploader.bind('FileUploaded', function(up, file, info) {
  // Redirect after successful upload
  window.location = 'http://mysite.com/users';
});

2)您也可以嘗試通過將以下代碼放在ApplicationController讓Rails進行重定向:

  # Allows redirecting for AJAX calls as well as normal calls
  def redirect_to(options = {}, response_status = {})
    if request.xhr?
      render(:update) {|page| page.redirect_to(options)}
    else
      super(options, response_status)
    end
  end

我知道這有點老了,但我想改善回應。 根據@gonchuki所說的,我是這樣做的:

uploader.bind('FileUploaded', function(up, file, info) {
  window.location = info.response;
});

在我的控制器中,我只用簡單的文本呈現url:

def create
  # do stuff here
  render :text => object_path(id: object)
end

希望也能提供幫助:)

您不能以這種方式進行重定向,因為使用任何上載運行時來上載文件都是間接操作 HTML5使用XHR,HTML4使用代理iframe,而flash / silverlight使用其內置的字節流API執行上傳。

如果您一次僅上傳一個文件,則唯一的選擇是使用FileUploaded事件。 第三個參數由所有運行時的服務器響應填充。 您實際上會像這樣使用它(來自iWasRobbed的編輯copypasta):

uploader.bind('FileUploaded', function(up, file, info) {
  // Redirect after successful upload
  window.location = info.response;
});

由於plupload只能在幾種不同的運行時上實現標准化,因此響應將始終為純文本,因此您的重定向URL必須位於響應的正文中。 如果您需要更復雜的響應,則始終可以發送序列化的JSON並在客戶端進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM