ブログトップ 記事一覧 ログイン 無料ブログ開設

akishin999の日記 RSSフィード Twitter


Google

2009-08-28

SWFUpload でファイルの送信順序を送信するには


Rails + SWFUpload v2.2.0.1 で作成しているファイルアップローダで、選択されたファイルの送信順序をサーバ側で受け取りたくていろいろと調べていたところ、以下のように upload_start_handler 内で file.index を addPostParam に設定する事で受け取れました。

swfu = new SWFUpload({
      upload_url:'<%= url_for upload_path(@key) %>',
      flash_url:'<%= url_for '/swfupload.swf' %>',
      upload_start_handler: function(file) {
        this.addPostParam('file_index', file.index);
      },
・
・
・



ただ、この方法だと何度も選択 -> 送信が繰り返された場合には、値がどんどん増えていってしまいます。
(3ファイルずつ選択し、3 回送信した場合、1 回目「0,1,2」、2回目「3,4,5」、3 回目「6,7,8」、という風になります。)

なので、「3 ファイルまでアップロード可能」「何度か繰り返された場合はその都度前回のファイルを上書き」と言った事を行いたい場合、なかなか難しい事になります。


結局、以下のように JavaScript でカウンタを持つ事で対応しました。

var index = 0;
var swfu = null;
window.onload = function () {  
swfu = new SWFUpload({
    upload_url:'<%= url_for upload_path(@key) %>',
    flash_url:'<%= url_for '/swfupload.swf' %>',
    upload_start_handler: function(file) {
      this.addPostParam('file_index', index++);
    },
・
・
・



JavaScript で宣言した変数 index の値を、upload_start_handler で送信してインクリメントしています。


ちなみに、SWFUpload で一度にアップロードする数を制限するには file_upload_limit の値を設定します。

今回のように、何回もアップロード可能だけれども、一回当たり 3 ファイルまで、といった事をやりたい場合は、upload_complete_handler などの中で Stats オブジェクトの file_queued プロパティや successful_uploads プロパティの値を 0 で初期化してやる事で実現できます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/akishin999/20090828/1251465726