从手机屏幕上的Android库中选择时无法加载图片

时间:2015-08-12 12:23:37

标签: android cordova phonegap-plugins phonegap-build android-gallery

我想选择图像形式的android gallery并将图片上传到服务器。我的代码适用于IOS应用程序。但是没有从Android手机获取图像。

在Android应用内部获取这样的显示图像网址

  

内容://com.android.providers.media.documents/document/image%3A352

如何从Android图库中获取正确的图片扩展程序? 我正在使用带有Phonegap的Hybird App。

document.addEventListener("deviceready", onDeviceReady, false);

        // device APIs are available
        //
        function onDeviceReady() {
            // Retrieve image file location from specified source
            navigator.camera.getPicture(
                uploadPhoto,
                function(message) { alert('get picture failed'); },
                {
                    quality         : 100,
                    destinationType : navigator.camera.DestinationType.FILE_URI,
                    sourceType      : navigator.camera.PictureSourceType.PHOTOLIBRARY
                }
            );
        }

        function uploadPhoto(imageURI) {
            //alert(imageURI); return false;

            //alert(imageURI);  

            var options = new FileUploadOptions(); 
            options.fileKey="file";

            //options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1)+'.png';
            options.mimeType="image/jpeg";

            var params = {};
            params.value1 = "test";
            params.value2 = "param";

            options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
            options.params = params; 
            options.chunkedMode = true; //this is important to send both data and files

            alert(options.fileName);
            var ft = new FileTransfer();
            ft.upload(imageURI, encodeURI("file_upload.php"), win, fail, options);
        }

        function win(r) {
                alert("Code = " + r.responseCode); //http response 200, means OK
                alert("Response = " + r.response); //php uploader response (failed)
                alert("Sent = " + r.bytesSent); //filesize
       }

        function fail(error) {
            alert("An error has occurred: Code = " + error.code);
            console.log("upload error source " + error.source);
            console.log("upload error target " + error.target);
        }

2 个答案:

答案 0 :(得分:2)

这是一个cordova错误 - https://issues.apache.org/jira/browse/CB-5398

您可以像这样更改路径。

function uploadPhoto(imageURI) {
            //alert(imageURI); return false;

            //alert(imageURI);  
            if (imageURI.substring(0,21)=="content://com.android") {
                photo_split=imageURI.split("%3A");
                imageURI="content://media/external/images/media/"+photo_split[1]; 
              } 

            var options = new FileUploadOptions();
            options.fileKey="file";
            //options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1)+'.png';
            options.mimeType="image/jpeg";

            var params = {};
            params.value1 = "test";
            params.value2 = "param";
            options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
            options.params = params; 
            options.chunkedMode = true; //this is important to send both data and files

            //alert(options.fileName);
            var ft = new FileTransfer();
            ft.upload(imageURI, encodeURI("file_upload.php"), win, fail, options);
        }

并将图像请求发送到file_upload.php。添加这样的条件。

       $file=$_FILES['file']['name']; 
        $new_file=explode('.', $file);
        $img_file=end($new_file);

        if($img_file=='png' || $img_file=='jpeg' || $img_file=='jpg')
        {  
            $file_name=$new_file[0];
        }  else { 
             $file_name=$_FILES['file']['name'];
             $_FILES['file']['name']=$_FILES['file']['name'].'.jpg';
        } 

        move_uploaded_file($_FILES["file"]["tmp_name"], 'your_location'.$file_name);

答案 1 :(得分:0)

您可以指定encodingType: Camera.EncodingType.JPEG并在成功回调中渲染图片,如下所示 - $('#yourElement).attr('src', "data:image/jpeg;base64," + ImageData);

navigator.camera.getPicture(onSuccess, onFail, {
    quality: 100,
    destinationType: Camera.DestinationType.DATA_URL,
    sourceType: Camera.PictureSourceType.SAVEDPHOTOALBUM,
    allowEdit: true,
    encodingType: Camera.EncodingType.JPEG,
    targetWidth: 500,
    targetHeight: 500,
    popoverOptions: CameraPopoverOptions,
    saveToPhotoAlbum: false,
    correctOrientation: true
});

function onSuccess(imageData) {
    console.log("Image URI success");
    ImageData = imageData;
    $('#yourElement).attr('src', "data:image/jpeg;base64," + ImageData);
    }