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"); }

あなたの回答
tips
プレビュー