ゼロから作るとクロスブラウザ対策とかが面倒そうだったので、「Doropzone.js」というJSライブラリを使ってみた。
サポートブラウザは、「Chrome 7+」「Firefox 4+」「IE 10+」「Opera 12+」「Safari 6+」。IE9が使えないのが辛い。
ライセンスは「MIT License」
ファイルはここからダウンロード
JSの読み込み
ドロップエリアを用意
静的に設置
クラスに「dropzone」を付けると自動でドロップゾーンに変わるっぽい。
input:file要素も自動で追加される。
動的に設置
// 追加 $('body').append(''); // ドロップエリア化 var myDropzone = new Dropzone("#my-awesome-dropzone", { url: "file-upload.php", /* ここにオプション書ける */ });
オプションを一部紹介
successやerrorなどの一部オプションは、設定するとデフォルト動作が上書きされるようなので注意する。
※英語なんとなくしか読めないので意味違ってる可能性あり
Dropzone.options.myAwesomeDropzone = { // myDropzone.options.myAwesomeDropzone = { // ファイルを転送に使用される名前 paramName: "file", // 許可する最大バイト数(MB単位) maxFilesize: 1, //ドロップエリアに入るメッセージ(HTML可) dictDefaultMessage: 'ファイルをここにドロップしてください。', // サムネイルを入れていく要素 // 未設定の場合、form要素の中に追加されていく previewsContainer: '#previewArea', // サムネイルのテンプレート previewTemplate: '', // http://www.dropzonejs.com/#layoutを参照 // アップロード前のバリデーション用? accept: function(file, done) { if (file.name == "hogehoge.png") { done("このファイルはアップできません。"); } else { done(); } }, // アップロード状況 uploadprogress: function(file, progress, bytesSent) { $(file.previewElement) // 対象の要素 console.log(file); console.log(progress); // パーセント形式 console.log(bytesSent); // バイト数 }, // 成功した場合 success: function(file){ $(file.previewElement) // 対象の要素 console.log(file); console.log(JSON.parse(e.xhr.response)); // サーバーからのレスポンスを取得できる }, // エラーがあった場合 error: function(file, message) { $(file.previewElement) // 対象の要素 console.log(file); console.log(message); // アップ失敗の理由 }, // 処理完了時 complete: function(file){ $(file.previewElement) // 対象の要素 console.log(file); }, };