У меня возникла проблема с загрузкой файла изображения на мой локальный веб-сервер (размещенный с использованием wampserver) для Android-приложения, созданного с использованием IBM Worklight 6.2.0 с версией Cordova 3.4.0. Фрагмент кода, как показано ниже:Кордова FileUpload API возвращает код ошибки 3
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
function onDeviceReady() {
// Nothing here
}
function getImage() {
// Retrieve image file location from specified source
navigator.camera.getPicture(uploadPhoto, function(message) {
alert('get picture failed');
}, {
quality: 40,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.PHOTOLIBRARY
});
}
function uploadPhoto(imageURI) {
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1);
options.mimeType = "image/jpeg";
var params = new Object();
params.value1 = "test";
params.value2 = "param";
options.params = params;
options.chunkedMode = false;
var ft = new FileTransfer();
ft.upload(imageURI, encodeURI("http://192.168.1.4:8081/folder_name/upload2.php"), win, fail, options);
}
function win(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
alert(r.response);
}
function fail(error) {
alert("An error has occurred: Code = " + error.code);
}
</script>
<button onclick="getImage();">Upload a Photo</button>
upload2.php
<?php print_r($_FILES); $new_image_name="namethisimage.jpg" ; move_uploaded_file($_FILES[ "file"][ "tmp_name"], "folder_name/uploads/".$new_image_name); ?>
Я получаю статус 200 HTTP и код ошибки 3. Кроме того, я также получаю эту ошибку ниже статуса HTTP и ошибка кода ошибки.
java.lang.SecurityException: Разрешение Отрицание: чтение com.android.providers.media.MediaDocumentsProvider содержание URI: //com.android.providers.media.documents/document/image: 14584 с PID = 4926, uid = 10092 требует android.permission.MANAGE_DOCUMENTS или grantUriPermission()
Есть ли какие-либо решения? Или есть лучший способ загрузить файл изображения?
Я добавил следующее AndroidManifest.xml
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
1) вызов deviceready не требуется; Worklight делает это для вас внутренне, иначе приложение не будет работать вообще. –
2) Убедитесь, что вы добавили android: permission = "android.permission.MANAGE_DOCUMENTS" –
@IdanAdar Забыл отметить, что я уже добавил разрешение MANAGE_DOCUMENTS в AndroidManifest.xml.Я удалил вызов deviceready, он все еще возвращает код ошибки 3. – imationyj