よく見かけるドラッグアンドドロップでファイルをアップロードする方法を試してみた。
画面側での実装を記載しておく。
もちろん、サーバー側でアップロードのリクエストを処理する必要はあるが、ここでは割愛する。
HTML
<html> <head> <title>画像をドラッグ&ドロップで一括アップロード</title> </head> <body> <div id="image_upload_section"> <div id="drop" style="width:700px; height:150px; padding:10px; border:3px solid;" ondragover="onDragOver(event)" ondrop="onDrop(event)" > ファイルをドラッグアンドドロップしてください。複数ファイル同時も対応しています。 </div> </div> </body> </html>
JavaScript(jQueryは使える前提)
<script type="text/javascript"> // File APIに対応していない場合はエリアを隠す if (!window.File) { document.getElementById('image_upload_section').style.display = "none"; } // ブラウザ上でファイルを展開する挙動を抑止 function onDragOver(event) { event.preventDefault(); } // Drop領域にドロップした際のファイルのプロパティ情報読み取り処理 function onDrop(event) { // ブラウザ上でファイルを展開する挙動を抑止 event.preventDefault(); // ドロップされたファイルのfilesプロパティを参照 var files = event.dataTransfer.files; for (var i=0; i<files.length; i++) { // 一件ずつアップロード imageFileUpload(files[i]); } } // ファイルアップロード function imageFileUpload(f) { var formData = new FormData(); formData.append('image', f); $.ajax({ type: 'POST', contentType: false, processData: false, url: 'http://example.com/image/upload', data: formData, dataType: 'json', success: function(data) { // メッセージ出したり、DOM構築したり。 } }); } </script>