Apachecordovaの「ファイル」プラグインを使用してiOS(またはAndroid)デバイスにファイルをローカルに保存する際に問題が発生しました。私が信じる問題は、パスを適切に設定することです。
これは、Xcodeから取得したエラーメッセージですダウンロードしたファイルを保存するためのパスを作成できませんでした:操作を完了できませんでした。(Cocoaエラー512)
ファイルをローカルに保存しようとしているコードは次のとおりです。
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
var root;
function onDeviceReady(){
// Note: The file system has been prefixed as of Google Chrome 12:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onInitFs, errorHandler);
}
function onInitFs(fs) {
var fileURL = "cdvfile://localhost/persistant/file.png";
var fileTransfer = new FileTransfer();
var uri = encodeURI("http://upload.wikimedia.org/wikipedia/commons/6/64/Gnu_meditate_levitate.png");
fileTransfer.download(
uri,
fileURL,
function(entry) {
console.log("download complete: " + entry.fullPath);
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
},
false,
{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
}
function errorHandler(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
alert('Error: ' + msg);
}
</script>
ファイルパスにタイプミス(または文法エラー)が含まれています:
var fileURL = "cdvfile://localhost/persistant/file.png";
persistentと書く必要があります。
正しいコード:
var fileURL = "cdvfile://localhost/persistent/file.png";
これまでのところ、これはAndroidでのみテストしましたが、そのまま、またはIOSでほとんど変更を加えなくても機能するはずです。
var url = 'example.com/foo'
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
fileSystem.root.getFile('foo_file', {create: true, exclusive: false},
function(file_entry){
var ft = new FileTransfer()
ft.download(url, file_entry.toURL(), function(fe){
fe.file(function(f){
reader = new FileReader()
reader.onloadend = function(ev){
console.log('READ!', ev.target.result)
}
reader.readAsText(f)
})
})
}
)
})
ファイルの内容も必要だったので、ダウンロード時に内容が必要ない場合は、末尾のビットを省略してもかまいません。
また、window.saveAsを使用するはるかに簡単な方法がありますが、Android 4.4でのみ使用可能です。
これらのリンクをチェックしてください:
http://cordova.Apache.org/docs/en/3.4.0/cordova_plugins_pluginapis.md.html#Plugin%20APIshttps://github.com/Apache/cordova- plugin-file/blob/dev/doc/index.md
http://cordova.Apache.org/docs/en/3.0.0/cordova_file_file.md.html#File
最初と2番目のリンクは、プラグインファイルとそのインストール方法に関する情報を提供します。
3つ目は、ファイルプラグインの使用方法を示しています。
Cordovaで何かをする必要があるときはいつでも、それを行うためのプラグインが利用可能かどうかを確認してください:)
よろしく。