1

plupload以下のコードでファイルをアップロードすると、 firebug コンソールにPOST /uploads 200 OK 8192msというメッセージが表示されます。文字の色は赤です。ターミナル出力を見ると、Completed 200 OK in 7653ms があります。

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コントローラーでは、アクションcreateは次のようになります。

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

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

任意のページにリダイレクトするにはどうすればよいですか? ご覧のとおり、ページusersへのアップロードが完了した後にリダイレクトを試みましたが、残念ながら何も起こりませんでした。createアクションの行にある場合は、head 200何も起こりません。

アップロードが完了した後、他のページにリダイレクトするにはどうすればよいですか? グーグルで検索してみましたが、方法が見つかりませんでした...

まだお聞きしたいのですが、ファイルをアップロードした後、常に Firebug コンソールにPOST /uploads 200 OKという行がログ メッセージなしで表示されるのはなぜですか?

4

4 に答える 4

2

window.location javascript 関数で簡単に実行できます。Plupload には、すべてのファイルのアップロードが完了すると生成されるuploadcompleteイベントがあります。FileUploaded イベントは、1 つのファイルのアップロード後に生成されます。したがって、複数のファイルをアップロードしたい場合は、uploadcomplete イベントが役立ちます。uploader のアイデアはここから取得され、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>

アップロードが完了すると、アップローダはアップロードされたすべてのドキュメントを一覧表示するようにリダイレクトします。

于 2013-05-17T09:01:54.073 に答える
1

2 つのオプション:

1) Plupload には、FileUploaded使用できるコールバックがあります。

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

2) 次のコードを に追加して、Rails にリダイレクトを実行させることもできますApplicationController

  # 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
于 2012-01-17T04:13:41.547 に答える
0

これは少し古いことはわかっていますが、応答を改善したいと思います。@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

これも役立つことを願っています:)

于 2013-01-29T14:58:08.447 に答える
0

アップロード ランタイムを使用したファイルのアップロードは間接的なアクションであるため、その方法でリダイレクトを行うことはできません。HTML5 は XHR を使用し、HTML4 はプロキシ iframe を使用し、flash/silverlight は組み込みのバイト ストリーミング API を使用してアップロードを実行します。

一度に 1 つのファイルをアップロードするだけの場合、唯一のオプションはFileUploadedイベントを使用することです。3 番目のパラメーターには、すべてのランタイムからのサーバー応答が取り込まれます。実際には次のように使用します (iWasRobbed の copypasta を編集):

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

plupload がいくつかの異なるランタイムで標準化できる唯一のものであることを考えると、応答は常にプレーン テキストになるため、リダイレクト URL は応答の本文に含まれている必要があります。より複雑な応答が必要な場合は、いつでもシリアル化された JSON を送信し、クライアント側で解析できます。

于 2012-01-18T11:59:31.250 に答える