@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

PhoneGapでダウンロードしたファイルを表示する

前回はファイルをダウンロードしてみました。画像や動画の場合はファイルを保存するだけではなくて、実際に参照したいですよね。
今回はダウンロードした画像ファイルなどを表示させてみようと思います。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script src="js/cordova-2.0.0.js"></script>
    <script src="js/jquery-1.8.1.js" ></script>
    <script src="js/sample.js"></script>
  </head>
  <body>
    <img src="" id="image" />
  </body>
</html>
function viewImage() {
    var filePath = 'file://' + rootDir + '/filename.png';
    $('#image').attr('src', filePath).on('error', function() {
        $(this).attr('src', 'noimage.png');
    });
}

簡単ですね。rootDirは前回説明した通りです。しかし、imgタグのsrc属性に値を入れる場合には、「file://」とプロトコルを指定しないとダメなようです。
画像だけでなく、動画も表示することが可能です。その場合は、imgタグではなくて、videoタグを使えば良いです。
別の方法として、FileReaderでファイルを読み込んで、readAsDataURLでBase64変換してimgタグのsrc属性に設定する方法もあります。

function viewImage2() {
    var filePath = 'file://' + rootDir + '/filename.png',
        reader = new FileReader();
    resolveLocalFileSystemURI(filePath, function(fileEntry) {
        fileEntry.file(function(f) {
            reader.onloadend = function(event) {
            	// 読み込んだ結果をimgタグのsrc属性に設定する
                $('#image').attr('src', event.target.result);
            };
            reader.readAsDataURL(f);
        }, function(e) {
            navigator.notification.alert('エラーですよ。');
        });
    }, function(e) {
        navigator.notification.alert('エラーですよ。');
    });
}

やっぱり複雑ですね。
画像や動画であれば、HTMLファイルに書けばいいのでこれで問題ないと思います。テキストファイルの中身を表示したい等と言う場合には、readAsTextで取らなければならないので、多少面倒なことをしなければならないです。