ハイブリッドアプリ開発でファイルのアップロード、ダウンロードを便利にするプラグインを使う
Apache Cordovaで本格スマホアプリに挑戦しよう 第7回
ダウンロード サンプルファイル (503.5 KB)
サンプルアプリ
図1は今回紹介するサンプルアプリのキャプチャー画面です。ダウンロードではサーバ上に存在するファイルをダウンロードし完了するとその画像を表示します。
また、アップロードでは画像データをサーバにアップロードし結果をJSONで受信し、そのメッセージを表示します。
アップロード時のサーバはリスト2のようなコードを用意しました。
<?php
if(isset($_FILES['image'])) {
$ret = array();
$ret['file'] = $_FILES['image'];
$ret['message'] = "Upload OK";
print json_encode($ret);
}
else{
$ret = array();
$ret['message'] = "Image Not Found";
print json_encode($ret);
}
?>
ファイルのダウンロード
ファイルのダウンロードでは、FileTransferのdownloadメソッドを利用し、表5に示す引数が指定できます。
FileTransfer.download(source,target,successCallback,errorCallback,[trustAllHosts,[options]]);
また、それぞれの引数の意味は、表5のとおりです。
| 引数 | 概要 |
|---|---|
| source | ネットワーク上のリソースを示すパス。encodeURIを使ってパスをエンコードする。 |
| target | ローカルの保存するパス |
| successCallback | 成功した場合のコールバック関数。関数の引数にはEntryオブジェクトが設定される |
| errorCallback | 失敗した場合のコールバック関数。関数の引数にはFileTransferErrorオブジェクトが設定される |
| trustAllHosts | すべてのホストを信頼するか?オレオレ証明書などをもちいている場合にtrueにする。通常の運用ではfalseにする。 |
| options | 追加で指定する任意のヘッダを指定する。BASIC認証などが必要な場合にはこちらに追加のヘッダを指定する。 |
ネットワーク上のファイルをローカルに保存するサンプルコードがリスト4のようになります。
// (1)FileTransferオブジェクトを作成
var fileTransfer = new FileTransfer();
fileTransfer.download(
encodeURI("http://192.168.1.1/cdv7/images/img.png"), // (2)ダウンロードするURLの指定
"cdvfile://localhost/persistent/img.png", // (3)保存先のパスを指定
function(entry){ // (4)成功した場合のCallback関数の指定
// FileEntry
$scope.$apply(function(){
// <img src="cdvfile://localhost/persistent/img.png" />と同様の設定
$scope.img_path = "cdvfile://localhost/persistent/img.png";
});
},
function(error){ // (5)失敗した場合のCallback関数の指定
alert('ERROR (' + error.code + ')');
},
false,
// (6)ヘッダの指定
{
headers : {
'X-Extra-Header' : 'Hoge'
}
}
);
// (7)ダウンロード中の状況を把握するためのイベント処理
fileTransfer.onprogress = function(event){
if(event.lengthComputable){
$scope.$apply(function() {
$scope.progress = "loaded :" + event.loaded + "/" + event.total;
});
}
};
(1)ではFileTransferオブジェクトを作成します。
downloadメソッドには(2)encodeURIメソッドを使って指定したダウンロードするURLと、(3)保存するパスをまず指定します。
続いて、(4)成功時のコールバック関数ではFileEntryオブジェクトが取得できますので、その後の処理をFileEntryオブジェクトを使って行います。
また、(5)失敗した場合のコールバック関数ではFileTransferErrorが取得できます。
ファイルをダウンロードする際に任意のヘッダが必要な場合は(6)のようにして任意のヘッダの指定が可能です。現時点では、headersというキーが指定可能でき、それ以外は指定できません。
ファイルのダウンロード中の状況を把握するには(7)のようにonprogressプロパティに関数を設定する事で可能で、表6に示す各プロパティ値の取得が可能です。
| 変数 | 説明 |
|---|---|
| lengthComputable | 進捗状況でデータサイズが取得ができる状態になったことを示すフラグ |
| loaded | ダウンロード、もしくはアップロード済みのデータサイズ |
| total | ダウンロード、もしくはアップロードするファイルのトータルサイズ |
この記事は参考になりましたか?
- Apache Cordovaで本格スマホアプリに挑戦しよう連載記事一覧
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
