log.metatype

SWFUpload Plugin for symfony

  • May 12, 2008, 20:47
  • Tags: php, lib

探しても見つからなかったので、
SWFUploadsymfony に組込むプラグインを作ってみた。
画像ファイルのサムネイル生成は sfThumbnailPlugin を使った。

» mySWFUploadPlugin

2008-07-16 追記
公式に出たっぽい sfSWFUploadPlugin


インストールとテスト

適当なプロジェクトを作ってテストするまで。

  1. プロジェクト作成。
    mkdir myproj
    cd myproj
    symfony init-project myproj
  2. プラグインをインストール。
    サムネイル生成に必要なsfThumbnailPluginもインストール。
    symfony plugin-install http://src.metatype.jp/mySWFUploadPlugin
    symfony plugin-install http://plugins.symfony-project.com/sfThumbnailPlugin
  3. サンプル用のappsとwebに入れ替える。
    rm -R apps
    rm -R web
    mv plugins/mySWFUploadPlugin/sample/apps apps
    mv plugins/mySWFUploadPlugin/sample/web web
  4. パーミッション修正とキャッシュクリア。
    symfony fix-perms
    symfony cc
  5. これでwebにブラウザからアクセスしてテストできる。
    ファイルの配置はサンプルを見れば大体分かると思う。

使い方

詳しく説明すると大変そうだから、簡単なフローの説明。

  1. SWFUploadのコンストラクタを使わずに、
    設定名(name)を付けて、
    SWFUpload.addSetting(name, {
    	SWFUpload Settings…
    });
    設定を定義しておく。
    イベントハンドラを設定しないと、
    web/mySWFUploadPlugin/handlers.js のデフォルトの挙動が適用される。
    設定はテンプレートに直接書いても良いし、
    外部JavaScriptにまとめておいてもOK。

  2. テンプレートでSWFUploadヘルパを有効。
    <?php use_helper('SWFUpload') ?>
    ヘルパを使ってSWFUploadを起動する。
    <?php echo swfupload($name, $id, $js, $version) ?>
    引数 省略時 説明
    $name string 必須 SWFUploadの設定名
    $id string|array 必須 アップロード開始トリガーになる要素のID
    $js string|array 読込まない SWFUploadの設定や使いたい外部JavaScriptなど。
    use_javascriptヘルパを使って読込まれるので、
    web/js/ からファイル名までのパスでOK。
    $version int 9 Flashのバージョン、通常は指定なしでOK。


  3. アップロードが実行される毎に、
    現在のモジュールの executeSWFUpload がコールされる。

    アップロード処理をサポートする mySWFUploadクラスを用意している。
    mySWFUploadクラスを通すとセッションに保存されたファイルIDで、
    アップロードファイルの情報を参照できる。
    メソッド 引数 説明
    __construct $tmp_dir
    $param
    $tmp_dir でアップロードファイルを一時的に移動するディレクトリを指定。 省略時は、システムのテンポラリディレクトリのまま。

    $param はアップロードファイルのパラメータ名。
    省略時は、Filedata になる、通常は指定なしでOK。
    createThumbnail $maxWidth
    $maxHeight
    $scale
    $inflate
    $quality
    $adapterClass
    $adapterOptions
    sfThumbnailPluginを使ってサムネイルを生成する。
    引数は sfThumbnail コンストラクタと同じ。
    setResponse $data SWFUploadへのレスポンスを出力する。
    $data にPHP変数を渡すとJSON形式で、
    イベントハンドラ upload_success_handler で受け取れる。
    getFile $id staticメソッド。
    $id にセッションに保存されたファイルIDを渡すと、
    アップロードファイルの情報を返す。


  4. イベントハンドラ upload_success_handler を設定してあれば、
    executeSWFUpload からのレスポンスを受け取る。
    引数 説明
    file SWFUploadが渡すファイルオブジェクト
    id executeSWFUpload からのレスポンス。
    mySWFUpload->setResponse を使っていれば、
    セッションに保存されたファイルIDを受け取る。
    data mySWFUpload->setResponse にPHP変数を渡していれば、
    JSON形式で受け取る。
    this.getModuleURL() で現在のモジュールの正規のURLが取得できる。
    this.getSessionID() で現在のセッションIDが取得できる。

  5. あとはイベントハンドラ側で表示処理をしたり、
    モジュールのアクションに渡したりすれば良いのでは。

適当に作ったから、色々と足りない部分がありそう。

6 Comments to "SWFUpload Plugin for symfony"

  1. Tony

    May 30, 2008, 04:25

    I was wondering whether it is possible to write your explanations in english? I installed the plugin, the JavaScript is returned from echo swfupload(); call, but nothing happens when you click on the UPLOAD link… thank you very much :) This seems to be the only swfupload plugin at the moment online!!

  2. Tony

    May 30, 2008, 05:11

    Thank you very much! I got it working, but still have a problem when the application is secure…

  3. inamorix

    May 30, 2008, 14:02

    Hi Tony

    Thank you for using my plugin and finding a problem!

    I tested a work of plugin in SSL, too.
    SWFUpload returns an error “IO Error” before a symfony action was called.
    It seems to be a problem of the security policy of the Flash Player.

    I found the topic of SWFUpload forum.
    http://swfupload.org/forum/generaldiscussion/203

    Mmm…
    I wish my plugin resolved the problem…

    Best regards
    inamorix

  4. rpsblog.com » A week of symfony #72 (12-&gt;18 may 2008)

    Jun 01, 2008, 09:03

    […] SWFUpload Plugin for symfony […]

  5. Tony

    Jun 04, 2008, 22:37

    great plugin. got it fully working on localhost, even with sfGuard, still have some problems on the other host i am using… thank you very much :)

  6. Une librairie Flash/Javascript pour l’upload : SWFUpload

    Aug 21, 2008, 19:13

    […] bien lire la doc, ne semble pas compatible avec tous les navigateurs) Existe pour Drupal(tuto) Pour symphony Pour […]

Post a comment