SWFUploadflashとjsを組み合わせて作られたファイルアップロードプラグインで、その機能は非常に強力です。以前プロジェクトで何度か使ったことがありますが、設定パラメータが多すぎて、使った後は使い方を忘れてしまい、次に使う時にはまた公式サイトでドキュメントを見なければならず、本当に面倒です。そこで思い切ってその使い方を記録しておくことにしました。英語が苦手な人にも参照しやすく、人にも自分にも有益で、一度やってしまえば永久的に解決します。

SWFUploadの特徴

  • 1、flashでアップロードを行い、ページはリフレッシュされず、Flashボタンのスタイルもカスタマイズできます;
  • 2、ブラウザ側でアップロードするファイルを制限できます;
  • 3、一度に複数ファイルのアップロードが可能ですが、アップロードキューがあり、キュー内のファイルは1つずつアップロードされます。サーバー側でのファイル受信は通常のフォームアップロードと同じです;
  • 4、開発者が使用できる豊富なイベントインターフェースを提供します;

SWFUploadのファイルアップロードの流れ:

  • 1、対応するjsファイルを読み込む
  • 2、SWFUploadオブジェクトをインスタンス化し、設定パラメータオブジェクトを渡して各方面の設定を行います。
  • 3、SWFUploadが提供するFlashボタンをクリックすると、ファイル選択ウィンドウがポップアップし、アップロードするファイルを選択します;
  • 4、ファイル選択が完了すると、条件に合致するファイルがアップロードキューに追加されます;
  • 5、startUploadメソッドを呼び出して、キュー内のファイルのアップロードを開始します;
  • 6、ファイルアップロード処理中に対応するイベントが発生します。開発者はこれらのイベントを利用してUIの更新、エラー処理、プロンプト表示などを行います。

SWFUploadは3つの部分で構成されています:SWFUpload.js、swfupload.swf、初期化設定パラメータおよび各種イベント処理関数。そのため、まずページにSWFUpload.jsを読み込みます。

<script src='SWFUpload.js.html'></script>

次にSWFUploadオブジェクトをインスタンス化します:

var swfu;
     
window.onload = function () {
    var settings_object = {//定义参数配置对象
        upload_url : "http://www.swfupload.org/upload.php",
            flash_url : "http://www.swfupload.org/swfupload.swf",
            file_post_name : "Filedata",
            post_params : {
           "post_param_name_1" : "post_param_value_1",
           "post_param_name_2" : "post_param_value_2",
           "post_param_name_n" : "post_param_value_n"
            },
            use_query_string : false,
            requeue_on_error : false,
            http_success : [201, 202],
            assume_success_timeout : 0,
            file_types : "*.jpg;*.gif",
            file_types_description: "Web Image Files",
            file_size_limit : "1024",
            file_upload_limit : 10,
            file_queue_limit : 2,
 
            debug : false,
     
            prevent_swf_caching : false,
            preserve_relative_urls : false,
     
            button_placeholder_id : "element_id",
            button_image_url : "http://www.swfupload.org/button_sprite.png",
            button_width : 61,
            button_height : 22,
            button_text : "<b>Click</b> <span class="redText">here</span>",
            button_text_style : ".redText { color: #FF0000; }",
            button_text_left_padding : 3,
            button_text_top_padding : 2,
            button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
            button_disabled : false,
            button_cursor : SWFUpload.CURSOR.HAND,
            button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
     
            swfupload_loaded_handler : swfupload_loaded_function,
            file_dialog_start_handler : file_dialog_start_function,
            file_queued_handler : file_queued_function,
            file_queue_error_handler : file_queue_error_function,
            file_dialog_complete_handler : file_dialog_complete_function,
            upload_start_handler : upload_start_function,
            upload_progress_handler : upload_progress_function,
            upload_error_handler : upload_error_function,
            upload_success_handler : upload_success_function,
            upload_complete_handler : upload_complete_function,
            debug_handler : debug_function,
    };
     
    swfu = new SWFUpload(settings_object);//实例化一个SWFUpload,传入参数配置对象
};
/*定义各种事件监听函数*/
function swfupload_loaded_function(){}
function file_dialog_start_function(){}
...等等

swfuploadアップロード機能を実装するのはとても簡単で、swfuploadオブジェクトをインスタンス化するだけです。しかし、煩雑なのは、インスタンス化時に使用するパラメータ設定オブジェクトと、各種イベントの発生タイミングや提供されるパラメータです。そこで重要ポイントです。以下のいくつかの表に、開発で使用するものを列挙しました。すでにかなり多いですが、これはswfuploadのすべてではなく、私が列挙したのは一般的によく使うものだけです。完全なドキュメントを確認するには、swfupload公式サイトを参照してください。

swfupload設定パラメータオブジェクトの一般的なプロパティと説明

属性 类型 默认值 描述
upload_url String   アップロードファイルを処理するサーバー側ページのurlアドレス。絶対アドレスでも相対アドレスでも構いません。相対アドレスの場合は、現在のコードがあるドキュメントのアドレスが基準になります。
preserve_relative_urls Boolean false falseの場合、SWFUploadはswfupload.swfで使用される相対アドレスを絶対アドレスに変換し、より良い互換性を実現します。
file_post_name String Filedata 通常のファイルフィールドでファイルをアップロードするときのname属性に相当します。サーバー側の受信ページはこの名前でアップロードされたファイルを取得します。
post_params Object(直接リテラル)   オブジェクトリテラルです。中のキー/値ペアは各ファイルと一緒にアップロードされます。ファイルアップロード時に何らかの情報を付加したい場合に便利です。
use_query_string Boolean false falseの場合、post_params属性で定義されたパラメータはpost方式でアップロードされます。trueの場合、get方式でアップロードされます(つまり、パラメータはクエリ文字列の形式でurlの後ろに付加されます)。
file_types String   この属性はアップロードを許可するファイルタイプを指定します。複数のタイプがある場合はセミコロンで区切ります。例:*.jpg;*.png。すべてのタイプを許可する場合は*.*を使用します。
file_types_description String   ファイル選択ウィンドウに表示されるファイルタイプの説明を指定します。ヒントや説明の役割を果たします。
file_size_limit String   アップロードするファイルの最大サイズを指定します。単位を付けることができ、有効な単位はB、KB、MB、GBです。単位を省略した場合はKBとみなされます。この属性が0の場合は、ファイルサイズが制限されないことを意味します。
file_upload_limit Number   アップロードできるファイルの最大数を指定します。アップロードに成功したファイル数がこの最大値に達すると、それ以上ファイルをアップロードできなくなり、アップロードキューにファイルを追加することもできなくなります。この属性を0に設定すると、ファイルのアップロード数が制限されないことを意味します。
file_queue_limit Number   ファイルアップロードキューに同時に保存できるファイルの最大数を指定します。この数を超えた場合、キュー内のファイルのアップロードが成功するか、アップロードエラーになるか、アップロードがキャンセルされた後にのみ、同数の他のファイルを追加できます。file_upload_limitの値または残りのアップロード可能なファイル数がfile_queue_limitより小さい場合は、その小さい方の値が適用されます。
flash_url String   swfupload.swfファイルの絶対パスまたは相対パス。相対パスは現在のページのアドレスを基準とします。swfuploadをインスタンス化した後は、このプロパティの値を変更できません。
prevent_swf_caching Boolean   trueの場合、swfupload.swfアドレスの後ろにランダムな値を追加して、flashムービーがキャッシュされるのを防ぎます。これは、特定のバージョンのIEブラウザがキャッシュされたflashムービーを読み込む際に発生するバグを防ぐためです。
button_placeholder_id String   DOM要素のidを指定します。このDOM要素はswfuploadのインスタンス化後にFlashボタンに置き換えられます。このDOM要素はプレースホルダーに相当します。
button_placeholder DOMElement   DOM要素を指定します。このDOM要素はswfuploadのインスタンス化後にFlashボタンに置き換えられます。このDOM要素はプレースホルダーに相当します。button_placeholder_idとbutton_placeholderの両方が存在する場合、button_placeholder_idが優先されます。
button_image_url String   Flashボタンの背景画像を指定します。相対アドレスでも絶対アドレスでも構いません。このアドレスはpreserve_relative_urls属性の影響を受け、upload_urlと同じ規則に従います。
この背景画像はスプライト画像である必要があり、上から下へFlashボタンの通常、マウスホバー、押下、無効の4つの状態が含まれています。したがって、この画像の高さはFlashボタンの高さの4倍である必要があります。
button_width Number   Flashボタンの幅を指定
button_height Number   Flashボタンの高さを指定します。button_image_urlで指定されたボタン背景画像の高さの1/4にする必要があります。
button_text String   Flashボタン上のテキストを指定します。htmlコードにすることもできます。
button_text_style String   Flashボタン上のテキストのスタイルです。使用方法は例を参照してください。
button_text_top_padding Number   Flashボタンの上端の内側パディングを指定します。負の値も使用できます。
button_text_left_padding Number   Flashボタンの左側のパディングを指定します。負の値も使用できます。
button_disabled Boolean false trueの場合、Flashボタンは無効状態になり、クリックしても何の動作もトリガーされません。
button_cursor     マウスがFlashボタン上にホバーしたときのカーソルスタイルを指定します。使用できる値はSWFUpload.CURSORで定義された定数です。
button_window_mode     FlashボタンのWMODE属性を指定します。使用可能な値はSWFUpload.WINDOW_MODEで定義された定数です。
file_dialog_start_handler Function   fileDialogStartイベントリスナー関数
file_queued_handler Function   fileQueuedイベントリスナー関数
file_queue_error_handler Function   fileQueueErrorイベントリスナー関数
file_dialog_complete_handler Function   fileDialogCompleteイベントリスナー関数
upload_start_handler Function   uploadStartイベントリスナー関数
upload_progress_handler Function   uploadProgressイベントリスナー関数
upload_error_handler Function   uploadErrorイベントリスナー関数
upload_success_handler Function   uploadSuccessイベントリスナー関数
upload_complete_handler Function   uploadCompleteイベントリスナー関数

SWFuploadの各種イベントの説明

fileDialogStart ( )
ファイル選択ウィンドウがポップアップされる直前に発生します。
fileQueued ( file object )
ファイルがアップロードキューに追加されるとこのイベントがトリガーされます。提供される唯一のパラメータは、そのファイルの情報を含むfileオブジェクトです。
fileQueueError ( file object, error code, message )
ファイルがアップロードキューへの追加に失敗したときにこのイベントがトリガーされます。失敗の原因は、ファイルサイズが許可された値を超えている、ファイルが空である、ファイルキューが満杯であるなどが考えられます。
このイベントは3つのパラメータを提供します。1つ目のパラメータは問題が発生したファイルオブジェクト、2つ目のパラメータは具体的なエラーコードで、SWFUpload.QUEUE_ERRORで定義された定数を参照できます。
fileDialogComplete ( number of files selected, number of files queued, total number of files in the queued )
ファイルの選択が完了し、選択されたファイルが処理された(アップロードキューへの追加を指す)後、すぐにこのイベントがトリガーされます。このイベント内でthis.startUpload()メソッドを呼び出して、ファイルの自動アップロードを実現できます。
パラメータnumber of files selectedは、今回ファイル選択ダイアログで選択されたファイルの数を指します。
パラメータnumber of files queuedは、今回アップロードキューに追加されたファイルの数を指します。
パラメータtotal number of files in the queuedは、現在のアップロードキューに合計いくつのファイルがあるかを指します(今回追加されたファイルを含みます)。
uploadStart ( file object )
ファイルがアップロードされようとしているときにトリガーされるイベントです。このイベントは、ファイル情報の検証、アップロードに伴って送信する追加情報の付加、その他の作業を行うための、アップロード前の最後の機会を提供します。falseを返すことで、今回のファイルのアップロードをキャンセルできます。
パラメータfile objectは、現在アップロードしようとしているファイルの情報オブジェクトです。
uploadProgress ( file object, bytes complete, total bytes )
このイベントはファイルのアップロード中に繰り返しトリガーされます。このイベントを利用してアップロードのプログレスバーを実装できます。
パラメータfile objectはファイル情報オブジェクトです。
パラメータbytes completeは、現在アップロード済みのバイト数です。
パラメータtotal bytesは、ファイルの総バイト数です。
uploadError ( file object, error code, message )
ファイルのアップロードが中断されたり、ファイルが正常にアップロードされなかった場合にトリガーされるイベントです。アップロードの停止、キャンセル、またはuploadStartイベントでfalseを返すと、このイベントが発生します。ただし、ファイルがキャンセルされてもまだキュー内に残っている場合は、このイベントはトリガーされません。
パラメータfile objectはファイル情報オブジェクトです。
パラメータerror codeはエラーコードです。詳細はSWFUpload.UPLOAD_ERRORで定義された定数を参照してください。
uploadSuccess ( file object, server data, received response )
ファイルのアップロードが成功するとトリガーされるイベントです。
パラメータfile objectはファイル情報オブジェクトです。
パラメータserver dataは、サーバー側が出力したデータです。
uploadComplete( file object )
1回のファイルアップロードのプロセスが完了したとき(成功したかどうかに関わらず)にトリガーされるイベントです。このイベントは、今回のアップロードが完了し、アップロードキューの次のファイルがアップロードを開始できることを示します。このイベントの発生後、キュー内の次のファイルのアップロードが開始されます。

swfuploadインスタンスのメソッド

メソッドの大部分は、パラメータ設定オブジェクトを動的に変更するメソッドです。

destroy ( )
SWFUploadをこれ以上使用する必要がなくなった場合、このメソッドを使用してそのインスタンスとDOM要素を破棄できます。
startUpload( file_id )
キュー内の指定されたファイルのアップロードを開始します。
パラメータfile_idは、アップロードするファイルのidを表します。このパラメータが指定されていない場合は、キュー内の最初のファイルがアップロードされます。
cancelUpload ( file_id, trigger_error_event )
ファイルのアップロードをキャンセル
パラメータfile_idはキャンセルするファイルのidです。このパラメータがundefinedまたは未指定の場合、キュー内の最初のファイルがキャンセルされます。
パラメータtrigger_error_eventはブール値を受け取ります。falseの場合、ファイルのキャンセル時にuploadErrorイベントはトリガーされません。デフォルトはtrueです。
stopUpload ( )
現在アップロード中のファイルを終了し、uploadErrorイベントがトリガーされます。現在アップロード中のファイルがない場合、このメソッドは何も行いません。
getStats ( )
キューのstatsオブジェクトを取得
setStats ( stats_object )
キューのstats_objectを変更します。変更したstats_objectをパラメータとして渡します。
getFile ( file_id|index )
ファイルidまたはファイルインデックスに基づいてFile Objectを取得します。ファイルidを使用する場合は、キュー内のファイルのみを取得できます。ファイルインデックスを使用する場合は、すべてのファイル(キュー内とキュー外の両方)を取得できます。
addPostParam ( name, value)
設定オブジェクトのpost_paramsで指定された追加情報オブジェクトに、キー/値ペアを追加します。
removePostParam ( name)
設定オブジェクト内のpost_paramsに含まれるキー/値ペアを削除します。パラメータnameは削除する値のキー名です。
addFileParam ( file_id, name, value)
特定のファイルに、一緒にアップロードされる追加情報を追加します。注意:指定されたそのファイルがアップロードされる場合にのみ、追加情報も一緒にアップロードされます。設定オブジェクトのpost_paramで設定された追加情報は、どのファイルがアップロードされる場合でも一緒に送信されます。
パラメータfile_idは指定するファイルのID、パラメータnameとvalueはそれぞれ追加情報の名前と値です。
removeFileParam ( file_id, name)
addFileParamメソッドで追加した追加情報を削除します。2つのパラメータについては、説明は不要でしょう。
setUploadURL ( url)
設定オブジェクト内のupload_urlの値を動的に設定します。
setPostParams ( param_object)
設定オブジェクト内のpost_paramsプロパティの値を動的に設定します。新しい値は古い値を上書きします。
パラメータparam_objectはオブジェクトリテラルである必要があり、その中のプロパティと値は文字列のみでなければなりません。
setFileTypes ( types, description)
設定オブジェクト内のfile_typesとfile_types_descriptionプロパティの値を動的に設定します。2つのパラメータはどちらも省略できません。
setFileSizeLimit ( file_size_limit)
設定オブジェクト内のfile_size_limitプロパティの値を動的に設定します。
setFileUploadLimit ( file_upload_limit)
設定オブジェクト内のfile_upload_limitプロパティの値を動的に設定します。
setFileQueueLimit ( file_queue_limit)
設定オブジェクト内のfile_queue_limitプロパティの値を動的に設定します。
setFilePostName ( file_post_name)
設定オブジェクト内のfile_post_nameプロパティの値を動的に設定します。
setUseQueryString ( use_query_string)
設定オブジェクト内のuse_query_stringプロパティの値を動的に設定します。
setButtonImageURL ( url)
設定オブジェクト内のbutton_image_urlプロパティの値を動的に設定します。
setButtonDimensions ( width, height)
Flashボタンの幅と高さを動的に設定します。2つのパラメータはそれぞれ幅と高さの値で、数値型であり、単位を付けることはできません。
setButtonText ( text)
設定オブジェクト内のbutton_textプロパティの値を動的に設定します。
setButtonTextStyle ( css_style_text)
設定オブジェクト内のbutton_text_styleプロパティの値を動的に設定します。
setButtonTextPadding ( left, top )
Flashボタンの左側のパディングと上端のパディングを動的に設定します。
setButtonDisabled ( isDisabled )
Flashボタンに対して無効/有効の操作を動的に行います。パラメータはブール値です。
setButtonCursor ( buttonCursor )
設定オブジェクト内のbutton_cursorの値を動的に設定します。

ファイル情報オブジェクト File Object

イベントリスナー関数では、ファイル情報オブジェクトを使用してファイル情報を取得し、次の操作に役立てることがよくあります。

属性 类型 描述
id String SWFUploadが定義するファイルIDで、ファイルのアップロードを制御するために使用されます。
index Number ファイルのインデックス。getFile(i)メソッドで使用されます。
name String ファイルの元の名前。パスは含みません。
type String 文件类型
creationdate Date ファイルの作成日
modificationdate Date ファイルの最終更新日
filestatus Number 現在のファイルの状態。詳細はSWFUpload.FILE_STATUSで定義されている定数を参照してください。

キュー状態オブジェクト Stats Object

現在のキューの状態を取得するために使用します。

属性 类型 描述
in_progress Number 取得される値は1または0で、現在のキューにアップロード中のファイルがあるかどうかを示します。
files_queued Number 現在のアップロードキュー内のファイル数。
successful_uploads Number 正常にアップロードされた(uploadSuccessイベントがトリガーされた)ファイルの数。
upload_errors Number アップロードに失敗したファイルの数(アップロードがキャンセルされたファイルを含む)。
upload_cancelled Number アップロードがキャンセルされたファイル数。
queue_errors Number fileQueueErrorイベントがトリガーされたファイルの数。

一些常量

理解を容易にするために、SWFUploadが定義するいくつかの定数。

常量名 描述
SWFUpload.instances この定数はオブジェクトであり、ページ上のすべてのSWFUploadインスタンスの参照の集合を表します。SWFUploadインスタンスのmovieNameプロパティでインデックス付けされます。
SWFUpload.movieCount ページ上に存在するSWFUploadインスタンスの数
   
SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED ユーザーが選択したファイルが許可された数を超えています。
SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT ファイルサイズが許可されたサイズを超えています。
SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE ファイルは空です
SWFUpload.QUEUE_ERROR.INVALID_FILETYPE 許可されていないファイルタイプ
   
SWFUpload.UPLOAD_ERROR.HTTP_ERROR サーバーが返すステータスコードが200ではありません。
SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL upload_url が設定されていない
SWFUpload.UPLOAD_ERROR.IO_ERROR ファイルの読み取りまたは転送中にエラーが発生しました。
SWFUpload.UPLOAD_ERROR.SECURITY_ERROR アップロードがセキュリティ上の制限を受けました。
SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED アップロードされたファイルの数が許可された最大値を超えています。
SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED アップロード中にエラーが発生
SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND startUpload()メソッドに渡されたファイルIDが存在しません。
SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED uploadStart()メソッド内でfalseが返された
SWFUpload.UPLOAD_ERROR.FILE_CANCELLED アップロードがキャンセルされた
SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED アップロードが中止された
   
SWFUpload.FILE_STATUS.QUEUED ファイルはキュー内でアップロード待ちの状態です。
SWFUpload.FILE_STATUS.IN_PROGRESS ファイルはアップロード中
SWFUpload.FILE_STATUS.ERROR ファイルをキューに追加するとき、またはアップロードするときにエラーが発生しました。
SWFUpload.FILE_STATUS.COMPLETE ファイルのアップロードが成功した
SWFUpload.FILE_STATUS. ファイルのアップロードがキャンセルされた
   
SWFUpload.CURSOR.ARROW マウスカーソルが矢印で表示される
SWFUpload.CURSOR.HAND マウスカーソルが手の形で表示される
   
SWFUpload.WINDOW_MODE.WINDOW Flashボタンはページ上のすべてのDOM要素の上に表示されます。
SWFUpload.WINDOW_MODE.OPAQUE 他のDOM要素がFlashボタンを覆うことを許可します。
SWFUpload.WINDOW_MODE.TRANSPARENT Flashボタンの透明表示を許可します。

下载地址