MonacaでiPadアプリを作成しています。
Cordovaバージョンをアップしてから(6.5から7.1.0)
これまで動いていたファイル転送プラグイン(FileTransfer)が正常に動作しなくなり、困っています。
また、今後、7.1.0から9.0へのバージョンアップも検討しているのですが、
使用しているファイル転送プラグインが、Cordova 9.0以降では非推奨となる、とのことで、
APIの解説に記載のあった、XMLHttpRequestを用いる方法で試しているのですが、
うまくいきません。
var filename = "uploadfile.txt"; //保存ファイル名 var sendData = "ファイル保存する内容"; window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { console.log('file system open: ' + fileSystem.name); fileSystem.root.getFile(filename, { create: true, exclusive: false }, function (fileEntry) { fileEntry.file(function (file) { var reader = new FileReader(); reader.onloadend = function() { // Create a blob based on the FileReader "result", which we asked to be retrieved as an ArrayBuffer var blob = new Blob([new Uint8Array(sendData)], { type: "text/plain" }); var oReq = new XMLHttpRequest(); var dataUrl = "http://アップロード先アドレス/保存先/uploader.php"; oReq.open("POST", dataUrl, true); oReq.onload = function (oEvent) { // all done! }; // Pass the blob in to XHR's send method oReq.send(blob); }; // Read the file as an ArrayBuffer reader.readAsArrayBuffer(file); }, function (err) { console.error('error getting fileentry file!' + err); }); }, function (err) { console.error('error getting file! ' + err); }); }, function (err) { console.error('error getting persistent fs! ' + err); });
ファイル保存する内容は、各画面で入力した内容を、
文字列で結合し、改行コードを付加したテキストファイルです(UTF8のファイル)
尚、アップロード先のuploader.phpは、以下の通りです。
(確か、どこかのサイトから、流用したものと思います)
<?php $uploaddir = '/アップロード先/'; $uploadfile = $uploaddir . basename($_FILES['file']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { echo 'File is valid, and was successfully uploaded.\n'; } else { echo 'Possible file upload attack!\n'; } echo 'Here is some more debugging info:'; print_r($_FILES); echo '</pre>'; ?>
ログには、エラーも何も出力されませんし、サーバにも、何も保存されていません。
Javascript自体、独学なため、書き方がダメなのかどうかの判断もできず、質問した次第です。
他の書き方があるなど、アドバイスをいただけないでしょうか?
なお、Cordovaバージョンは、7.1.0で検証しています。
ファイルのダウンロード処理もあるのですが、そちらはなんとかうまくダウンロードできています。
追記
実現したいことは、
画面上で作成したテキストデータを、サーバに保存する、ということなので、
このやり方で、実現が難しそうであれば、あまり現実的ではないですが、
HTTPのrequestにテキストデータを乗せて、サーバ側で読み取って、ファイル保存をすることも検討しています。
あなたの回答
tips
プレビュー