質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

1827閲覧

【cordova】cordova-plugin-file-transferを使うと、Androidでファイル送信が0バイトになってしまう。

K_Endo

総合スコア13

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/07/06 06:03

cordovaでcordova-plugin-file-transferを使って、
写真をサーバーへアップロードるするAndroidアプリを作成しています。

わたくしの後述のコードでは、下記のconsole logが出力されます。

Successful file write... fileURL : file:///data/data/com.adobe.phonegap.app/cache/.Pic.jpg%3F1530809009472 Successful upload... fileEntry.fullPath = /.Pic.jpg?1530809009472 Code = 200 response = bytesSent = 0

このログより、Androidからサーバーへのアクセスは成功しているようですが、
ファイルの転送が0バイト、つまり転送されていないようです。

また、サーバー側では、ファイルは保存されていますが
サイズが0バイトとなっていました。

どなたか、解決策が分かる方、ご回答よろしくお願い致します。

また、他に必要な情報がありましたら、ご指摘お願い致します。


バージョン:

Phonegap Buiid : 7.1.0 Android : 5.0.1 cordova-plugin-file : 6.0.1 cordova-plugin-file-transfer : 1.7.1

ソースコード:

//select and upload picture $(document).on("click", ".pic-button", function() { openFilePicker(); }); function openFilePicker(selection) { var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM; var options = setOptions(srcType); if (selection == "picker-thmb") { // To downscale a selected image, // Camera.EncodingType (e.g., JPEG) must match the selected image type. options.targetHeight = 100; options.targetWidth = 100; } navigator.camera.getPicture(function cameraSuccess(imageUri) { // Do something with image console.log("get picture"); console.log("imageUri : "+imageUri); image_uri = imageUri; URItoFileEntry(imageUri); onUploadFile(imageUri); }, function cameraError(error) { //console.debug("Unable to obtain picture: " + error, "app"); console.log("Unable to obtain picture: " + error, "app"); }, options); } function setOptions(srcType) { var options = { // Some common settings are 20, 50, and 100 quality: 50, destinationType: Camera.DestinationType.FILE_URI, // In this app, dynamically set the picture source, Camera or photo gallery sourceType: srcType, encodingType: Camera.EncodingType.JPEG, mediaType: Camera.MediaType.PICTURE, allowEdit: true, correctOrientation: true //Corrects Android orientation quirks } return options; } function URItoFileEntry(imageURI) { console.log("URItoFileEntry"); window.resolveLocalFileSystemURL(imageURI, fileEntryToArrayBuffer, onError); } function fileEntryToArrayBuffer(fileEntry) { console.log("fileEntryToArrayBuffer"); console.log(fileEntry.name); file_entry_name = image_uri.substr(image_uri.lastIndexOf('/') + 1); fileEntry.file( function(file) { console.log("fileEntry.file"); var reader = new FileReader(); reader.onloadend = ArrayBufferToBlob; reader.readAsArrayBuffer(file); }, onError2); } function ArrayBufferToBlob(event) { console.log("ArrayBufferToBlob"); blob = new Blob([event.target.result], { type: "image/jpeg" }); console.log("blob.size : "+blob.size); console.log("blob.type : "+blob.type); } function onError() { console.log("onError"); } function onError2() { console.log("onError2"); } function onUploadFile(imageUri) { console.log("onUploadFile"); console.log("imageUri : "+imageUri); window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) { console.log('file system open: ' + fs.name); var dirEntry = fs.root; console.log("imageUri : "+imageUri); dirEntry.getFile(imageUri, { create: true, exclusive: false }, function (fileEntry) { console.log("fileEntry name"); console.log(fileEntry.name); // Write something to the file before uploading it. console.log("writeFile"); writeFile(fileEntry); }, onErrorCreateFile); }, onErrorLoadFs); console.log("onUploadFile end"); } function writeFile(fileEntry, dataObj) { // Create a FileWriter object for our FileEntry (log.txt). fileEntry.createWriter(function (fileWriter) { fileWriter.onwriteend = function () { console.log("Successful file write..."); upload(fileEntry); }; fileWriter.onerror = function (e) { console.log("Failed file write: " + e.toString()); console.log(e.toString()); }; if (!dataObj) { if(blob == undefined) { console.log("blob undefined"); } else { console.log("blob defined"); dataObj = blob; } } fileWriter.write(dataObj); }, failCreateWriter); } function failCreateWriter(error) { console.log(error.code); } function upload(fileEntry) { // !! Assumes variable fileURL contains a valid URL to a text file on the device, var fileURL = fileEntry.toURL(); var success = function (r) { console.log("Successful upload..."); console.log("fileEntry.fullPath = " + fileEntry.fullPath); console.log("Code = " + r.responseCode); console.log("response = " + r.response); console.log("bytesSent = " + r.bytesSent); } var fail = function (error) { ons.notification.alert("An error has occurred: Code = " + error.code); } function displayFileData(data){ console.log("displayFileData"); //ons.notification.alert(data); } var options = new FileUploadOptions(); options.chunkedMode = false; options.fileKey = "file"; options.fileName = file_entry_name; options.mimeType = "image/jpeg"; var params = {}; params.value1 = "test"; params.value2 = "param"; options.params = params; console.log("fileURL : "+fileURL); var ft = new FileTransfer(); // SERVER must be a URL that can handle the request, like // http://some.server.com/upload.php var url_post_image = "http://some.server.com/upload.php"; ft.upload(fileURL, encodeURI(url_post_image), success, fail, options); }; function onErrorLoadFs() { console.log("onErrorLoadFs"); } function onErrorCreateFile() { console.log("onErrorCreateFile"); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問