サンプルアプリ
図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 | ダウンロード、もしくはアップロードするファイルのトータルサイズ |
