3

Я хочу выбрать форму андроидной галереи и загрузить изображение на сервер. Мой код работает правильно для приложений IOS. Но не получить изображение с телефона Android.Невозможно загрузить изображение, если оно выбрано из галереи на Android в телефоне

Внутри андроид приложение получать URL изображения показать, как это содержание

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

Что я должен сделать, чтобы получить правильное расширение изображения из галереи Android? Я использую приложение Hybird с Phonegap.

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

Это является 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); 
+0

Это полезно ... Спасибо – Avinash

0

Вы можете указать encodingType: Camera.EncodingType.JPEG и сделать изображение в успех обратного вызова, как this- $('#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); 
    } 
+0

Пожалуйста, отметьте его исправленным, если его работа – nickalchemist

Смежные вопросы