LoginSignup
40
39

More than 5 years have passed since last update.

HTML5 File APIを使用しローカルファイルを読み込む簡単なサンプル

Last updated at Posted at 2015-01-19

HTML5 File APIとは

今までセキュリティ上、ローカルファイルにアクセスできなかったが、HTML5から「File API」というのを使用し、ローカルファイルを読み込むことができるようになった。

サンプルと解説

画像ファイルを選択すると、その画像ファイルをプレビューだけするサンプル。
今まで、サーバーに画像をアップしないとできなかったことが、HTML + JavaScriptだけで完結できる。
これにより、HTML5のアプリケーションの幅が広がる。

また、SNSサイトなどでアイコン画像を、サーバーにアップする前にプレビューするときなどに使用される。
※キャンセルさせる画像は、わざわざサーバーにアップされないメリットがある

HTML

<input type="file" id="files" name="files[]">
<output></output>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>

JavaScript

$(function(){

// --------------------------------------------------------
// 関数定義
// --------------------------------------------------------
function handleFileSelect(evt) {
    var files = evt.target.files; // inputタグからFileオブジェクトを取得

    // ファイル数分実行
    for (var i = 0, f; f = files[i]; i++) {
        if (!f.type.match('image.*')) {
            continue;
        }

        var reader = new FileReader(); // ファイル読み取り用オブジェクト作成

        // ファイルを読み時
        reader.onload = (function(theFile) {
            return function(e) {
                // サムネイル用のimgタグ
                var $html = ['<img class="photo" src="', e.target.result,'" title="', escape(theFile.name), '">'].join('');

                // サムネイルタグを生成
                $('output').append($html);
            };
        })(f);

        // データURLにエンコードした内容を格納
        reader.readAsDataURL(f);
    }
}



// --------------------------------------------------------
// Ready時実行
// --------------------------------------------------------
// File APIのサポートチェックし、ボタンを押した時に実行
if (window.File && window.FileReader && window.FileList && window.Blob) {
    $('#files').on('change', handleFileSelect);
} else {
    alert('お使いのブラウザはサポートしておりません');
}


});

補足

Fileオブジェクトのプロパティ

  • name : ファイルの名前
  • type : ファイルのMIME/TYPE
  • size : ファイルのサイズ(バイト)
  • urn : ファイルのURN(URL)

参考URL

40
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
39