探しても見つからなかったので、
SWFUpload を symfony に組込むプラグインを作ってみた。
画像ファイルのサムネイル生成は sfThumbnailPlugin を使った。
» mySWFUploadPlugin
2008-07-16 追記
公式に出たっぽい sfSWFUploadPlugin
インストールとテスト
適当なプロジェクトを作ってテストするまで。
-
プロジェクト作成。
mkdir myproj cd myproj symfony init-project myproj
-
プラグインをインストール。
サムネイル生成に必要なsfThumbnailPluginもインストール。symfony plugin-install http://src.metatype.jp/mySWFUploadPlugin symfony plugin-install http://plugins.symfony-project.com/sfThumbnailPlugin
-
サンプル用のappsとwebに入れ替える。
rm -R apps rm -R web mv plugins/mySWFUploadPlugin/sample/apps apps mv plugins/mySWFUploadPlugin/sample/web web
-
パーミッション修正とキャッシュクリア。
symfony fix-perms symfony cc
-
これでwebにブラウザからアクセスしてテストできる。
ファイルの配置はサンプルを見れば大体分かると思う。
使い方
詳しく説明すると大変そうだから、簡単なフローの説明。
-
SWFUploadのコンストラクタを使わずに、
設定名(name)を付けて、SWFUpload.addSetting(name, { SWFUpload Settings… });設定を定義しておく。
イベントハンドラを設定しないと、
web/mySWFUploadPlugin/handlers.js のデフォルトの挙動が適用される。
設定はテンプレートに直接書いても良いし、
外部JavaScriptにまとめておいてもOK。
-
テンプレートで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。
-
アップロードが実行される毎に、
現在のモジュールの executeSWFUpload がコールされる。
アップロード処理をサポートする mySWFUploadクラスを用意している。
mySWFUploadクラスを通すとセッションに保存されたファイルIDで、
アップロードファイルの情報を参照できる。メソッド 引数 説明 __construct $tmp_dir
$param$tmp_dir でアップロードファイルを一時的に移動するディレクトリを指定。 省略時は、システムのテンポラリディレクトリのまま。
$param はアップロードファイルのパラメータ名。
省略時は、Filedata になる、通常は指定なしでOK。createThumbnail $maxWidth
$maxHeight
$scale
$inflate
$quality
$adapterClass
$adapterOptionssfThumbnailPluginを使ってサムネイルを生成する。
引数は sfThumbnail コンストラクタと同じ。setResponse $data SWFUploadへのレスポンスを出力する。
$data にPHP変数を渡すとJSON形式で、
イベントハンドラ upload_success_handler で受け取れる。getFile $id staticメソッド。
$id にセッションに保存されたファイルIDを渡すと、
アップロードファイルの情報を返す。
-
イベントハンドラ upload_success_handler を設定してあれば、
executeSWFUpload からのレスポンスを受け取る。
this.getModuleURL() で現在のモジュールの正規のURLが取得できる。引数 説明 file SWFUploadが渡すファイルオブジェクト id executeSWFUpload からのレスポンス。
mySWFUpload->setResponse を使っていれば、
セッションに保存されたファイルIDを受け取る。data mySWFUpload->setResponse にPHP変数を渡していれば、
JSON形式で受け取る。
this.getSessionID() で現在のセッションIDが取得できる。
-
あとはイベントハンドラ側で表示処理をしたり、
モジュールのアクションに渡したりすれば良いのでは。
適当に作ったから、色々と足りない部分がありそう。
6 Comments to "SWFUpload Plugin for symfony"
Tony
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!!
Tony
Thank you very much! I got it working, but still have a problem when the application is secure…
inamorix
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
rpsblog.com » A week of symfony #72 (12->18 may 2008)
[…] SWFUpload Plugin for symfony […]
Tony
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
Une librairie Flash/Javascript pour l’upload : SWFUpload
[…] bien lire la doc, ne semble pas compatible avec tous les navigateurs) Existe pour Drupal(tuto) Pour symphony Pour […]