2014-09-03 1 views
0

에 의해 점점 경로를 사용하여 파일을 읽을 수 없습니다. photolibrary에서 그림을 선택해야하는데, localStorage에서 선택한 그림의 경로를 저장해야합니다.이 경우 destinationType을 FILE_URI로 사용했는데 다음을 사용하여 선택한 그림을 base64 문자열로 변환하는 데 도움이되는 다른 함수를 호출해야합니다. 파일 판독기의 속성 인 readAsDataURL을 사용하여 해당 문자열을 서버에 업로드하십시오. 첫 번째 부분은 정상적으로 작동하지만 두 번째 부분이 작동하지 않으면이 문제를 해결하는 데 도움이됩니다. 내가 내 질문에 대한 답을 가지고 코드에 따라내가 개발 폰갭 응용 프로그램에 새로운 오전 FILE_URI

<button class="button" onclick="uploadImage();">From Photo Library</button> 
<img style="display:none;width:60px;height:60px;" id="largeImage" src="" /> 
<button class="button" onclick="syncData();">Sync Data</button> 

내 Script.js은 내 HTML 페이지가

,

var pictureSource; // picture source 
var destinationType; 
document.addEventListener("deviceready",onDeviceReady,false); 
function onDeviceReady() { 
    pictureSource=navigator.camera.PictureSourceType; 
    destinationType=navigator.camera.DestinationType; 
} 
var pictureSource = navigator.camera.PictureSourceType; 
var destinationType = navigator.camera.DestinationType; 
function uploadImage(){ 
    alert('called upload pic'); 
    //Using library    
    navigator.camera.getPicture(uploadPhoto, onFailcapturePhoto, { quality: 50, 
    destinationType: destinationType.FILE_URI, sourceType: pictureSource.PHOTOLIBRARY}); 
} 
function onFailcapturePhoto(message) {  
    alert("Message = " + message); 
} 
function uploadPhoto(imageURI) { 
    if(!localStorage.imageArray) { 
     var imageArray = []; 
     imageArray.push(imageURI); 
     localStorage.setItem('imageArray',JSON.stringify(imageArray)); 
     alert(JSON.stringify(imageArray)); 
    } else { 
     var imagefile = JSON.parse(localStorage.imageArray); 
     imagefile.push(imageURI); 
     localStorage.setItem('imageArray',JSON.stringify(imagefile)); 
     alert(JSON.stringify(imagefile)); 
    } 
    var largeImage = document.getElementById('largeImage'); 
    largeImage.style.display = 'block'; 
    largeImage.src = imageURI; // here i can display the image 
} 
function syncData() { 
var reader = new FileReader();        
var selectedImageArray = []; 
function readFile(index) { 
    alert('in read file'); // here i am getting alert 
    if(index >= JSON.parse(localStorage.imageArray).length) return; 
    var file = JSON.parse(localStorage.imageArray)[index]; 
    alert('file=='+file); // here i am getting path  
    reader.onloadend = function(e) { 
     // get file content 
     alert('in loadend'); 
     selectedImageArray[index] = e.target.result; 
     alert('image data==:>'+selectedImageArray[index])  
     readFile(index+1);       
    } 
    if(file) { 
     alert('going to read'); // i got alert here, after this line i don't get anything 
     reader.readAsDataURL(file); 
     alert('reading finished'); 
    } else { 
     alert('Your Browser does not support File Reader..'); 
    }   
}       
readFile(0);  
alert('before clear'+JSON.stringify(localStorage.imageArray)); 
localStorage.clear(); 
alert('after clear'+JSON.stringify(localStorage.imageArray)); 
} 

감사 & 감사합니다, 무랄리 Selvaraj

+0

왜 base64로 직접 사진을 촬영하지? 나는 이것이 카메라 플러그인을 통해 가능하다고 생각 했는가? – Sithys

+0

@Sithys 내가 걸릴 수 있지만 시간 메모리가 응용 프로그램에 손상을 일으킬 여러 이미지를 선택해야합니다. –

답변

0

. this author합니다. 큰 감사 ..

01 23,516,

내 업데이트 된 코드는 다음과 같습니다

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

if(!localStorage.imageArray) { 
    var imageArray = []; 
    imageArray.push(imageURI); 
    localStorage.setItem('imageArray',JSON.stringify(imageArray)); 
    alert(JSON.stringify(imageArray)); 
} else { 
    var imagefile = JSON.parse(localStorage.imageArray); 
    imagefile.push(imageURI); 
    localStorage.setItem('imageArray',JSON.stringify(imagefile)); 
    alert(JSON.stringify(imagefile)); 
} 
} 

function syncData() { 
    var selectedImageArray = new Array(); 
    function readFile(index) { 
    if(index >= JSON.parse(localStorage.imageArray).length) { 
     if(selectedImageArray.length == 0) return;  
     $.ajax({ 
      url : 'Here place your api', //your server url where u have to upload 
      type : 'POST', 
      dataType : 'JSON', 
      contentType : 'application/json', 
      data : JSON.stringify(selectedImageArray) 
     }) 
     .done(function(res) { 
      alert('success='+res); 
      localStorage.clear(); 
     }) 
     .error(function(err) { 
      alert('error='+err); 
     }); 
    } else { 
     var filePath = JSON.parse(localStorage.imageArray)[index]; 
     window.resolveLocalFileSystemURI(filePath, function(entry) { 
      var reader = new FileReader(); 

      reader.onloadend = function(evt) { 
       selectedImageArray.push(evt.target.result); 
       readFile(index+1); 
      } 

      reader.onerror = function(evt) { 
        alert('read error'); 
        alert(JSON.stringify(evt)); 
       } 

      entry.file(function(f) { 
       reader.readAsDataURL(f) 
      }, function(err) { 
       alert('error='+err); 
      }); 

     }); 
    }  
} 
readFile(0); 
}