IBM Worklight 6.2.0 및 Cordova 버전 3.4.0을 사용하여 빌드 된 안드로이드 하이브리드 응용 프로그램의 로컬 웹 서버 (wampserver를 사용하여 호스트 됨)에 이미지 파일을 업로드하는 데 문제가 있습니다. 코드 조각은 다음과 같습니다 :코르도바 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); ?>
내가 HTTP 상태 200 에러 코드를 그 외에 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를 추가했는지 확인하십시오. 이미 AndroidManifest.xml에 MANAGE_DOCUMENTS 권한을 추가했음을 잊어 버렸습니다.deviceready 호출을 제거했습니다. 여전히 오류 코드 3을 반환합니다. – imationyj