2013-10-20

javascript:ファイルの読み込み(ドラッグ&ドロップ)

ドラッグ&ドロップでファイルを読み込む(複数ファイルの選択可能)

画像ファイルの場合、追加して表示します。

サンプル

◆html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File API Sample (onDrop)</title>
<script src="onDrop.js"></script>
<style>
html,body {
 margin:  0px;
 padding: 0px;
 height:  100%;
}
#drop img {
 height: 75px;
 border: 1px solid #000;
 margin: 10px 5px 0 0;
 float: left;
}
</style>
</head>
<body>
<div>下にファイルをドロップしてください。ファイルを表示します。</div>
<div id="drop" style="width:95%; height:90%;" ondragover="onDragOver(event)">
</div>
</body>
</html>

◆javascript(FileInput.js)

25-31行目:ファイルが画像の場合の処理(height=75pxの大きさで画像を表示)
34-39行目:ファイルが画像以外の場合の処理(テキストを表示)
window.onload = function() {
 if (window.File) {
     // File APIに関する処理を記述
//      window.alert("File APIが実装されてます。");
  document.getElementById("drop").addEventListener("drop", onDrop, false);
 } else {
     window.alert("本ブラウザではFile APIが使えません");
    }
}

// Drop領域にドロップした際のファイルのプロパティ情報読み取り処理
function onDrop(event){
 var files = event.dataTransfer.files;
 var drop = document.getElementById("drop");
 // ファイルの配列から1つずつファイルを選択
 for(var i=0; i< files.length; i++){
  var f = files[i];
  // FileReaderオブジェクトの生成
  var reader = new FileReader();
  // エラー発生時の処理
  reader.onerror = function (evt) {
   drop.innerHTML = "読み取り時にエラーが発生しました。";
  }
  if (f.type.match('image.*')) {
         reader.onload = function (evt) {
           var img = document.createElement('img');
           img.src = evt.target.result;
           document.getElementById("drop").appendChild(img);
         }
         // readAsDataURLメソッドでファイルの内容を取得
         reader.readAsDataURL(f);
  } else {
   // ファイル読取が完了した際に呼ばれる処理
   reader.onload = function (evt) {
    var content = reader.result.replace(/</g,'<')
    drop.innerHTML = content;
   }
   // readAsTextメソッドでファイルの内容を取得
   reader.readAsText(f);
  }
     }
     // ブラウザ上でファイルを展開する挙動を抑止
     event.preventDefault();
}

function onDragOver(event){ 
 // ブラウザ上でファイルを展開する挙動を抑止
 event.preventDefault(); 
}

参考にしたページ





以上