2012-03-28 3 views
2

Я использую следующий код для получения изображений base64 данных для отображения и загрузки на сервер. Но я хочу сохранить это снятое изображение в папке sdcard. Пожалуйста, помогите мне сделать это.Как переместить захваченное изображение в PhoneGap в папку в sdcard

Это необходимо для получения данных изображения base64, поскольку сервер поддерживает только этот формат. Вот почему я использую destinationType = 0 (означает DATA_URL). Теперь у меня есть данные изображения base64, но как я могу сохранить эти данные на SD-карте?

uploadPhoto(isSourceCamera, onPhotoDataSuccess, onFail); 

function uploadPhoto(isSourceCamera, onPhotoDataSuccess, onFail) 
{ 
    pictureSource = navigator.camera.PictureSourceType; 
    if (isSourceCamera) 
    { 
     //QUALITY MUST BE LOW TO AVOID MEMORY ISSUES ON IPHONE4 ! (and other low memory phones). 
     //must resize to make it faster to upload and avoid failure with low memory phones. 
     navigator.camera.getPicture(onSuccessFunc, onFail, { 
          quality : 35, 
          sourceType : pictureSource.CAMERA, 
          targetWidth:750, 
          targetHeight:750, 
          allowEdit:true, 
          destinationType:0 
          }); 
    } 
    else 
    { 
     navigator.camera.getPicture(onSuccessFunc, onFail, { 
          quality : 35, 
          sourceType : pictureSource.PHOTOLIBRARY, 
          targetWidth:750, 
          targetHeight:750, 
          allowEdit:true, 
          destinationType:0 
          }); 
    } 
} 

function onPhotoDataSuccess(imageData) 
{ 
    **//I want to smae my image here in sdcard folder.** 
    var nodeid = localStorage.getItem("user_nodeid"); 
    var modifyImgData = imageData.replace(' ', '+'); 
    document.getElementById('image').src = setLocalStorageImage(localStorage.getItem(nodeid+"image"), modifyImgData); 
    document.getElementById('profileMenu').src = setLocalStorageImage(localStorage.getItem(nodeid+"smallimage"), modifyImgData); 
    $.ajax({ 
      type: "POST", 
      url: appURL+"api/upload/image/" +nodeid+ "/1", 
      data: "image=" + encodeURIComponent(modifyImgData), 
      success: function(msg){ 
        //No need to do anything here 
        if (msg.documentElement.getElementsByTagName("message")[0].childNodes[0].nodeValue != 'success') 
         onFail('Error in uploading image at server. Please try again.'); 
      } 
     }); 
} 

function onFail(message){ 
    alert(message); 
} 

ответ

0

Поскольку у вас есть данные в формате Base64 вы можете просто использовать FileWriter для сохранения данных на диск.

+0

Привет Саймон Спасибо за ответ, я пытался "FileWriter", но не для сохранения В случае успешного в perticular расположения SDCard (например, SDCard/myphotos). Как назначить этот путь? Также не знаете, как сохранить данные base64 в качестве действительного изображения в телефонной заторе? Пожалуйста, помогите .. – Ram

+0

Вот хороший пример использования FileWriter. http://docs.phonegap.com/ru/1.5.0/phonegap_file_file.md.html#FileWriter_full_example –

2

Вот верный ответ на исходный вопрос: Как переместить захваченное изображение в PhoneGap в папку на SD-карте?

function onfail(error,caller){ 
    error = error || '[error]'; 
    caller = caller || '[caller]'; 
    alert('Error > '+caller+" code: "+error.code); 
}; 

/* 
    Error codes 
    NOT_FOUND_ERR = 1; 
    SECURITY_ERR = 2; 
    ABORT_ERR = 3; 
    NOT_READABLE_ERR = 4; 
    ENCODING_ERR = 5; 
    NO_MODIFICATION_ALLOWED_ERR = 6; 
    INVALID_STATE_ERR = 7; 
    SYNTAX_ERR = 8; 
    INVALID_MODIFICATION_ERR = 9; 
    QUOTA_EXCEEDED_ERR = 10; 
    TYPE_MISMATCH_ERR = 11; 
    PATH_EXISTS_ERR = 12; 
*/ 


function doCameraAPI() { 
    // Retrieve image file location from specified source 
    navigator.camera.getPicture(getImageURI, function(message) { 
     alert('Image Capture Failed'); 
    }, { 
     quality : 40, 
     destinationType : Camera.DestinationType.FILE_URI 
    }); 

}; //doCameraAPI 

function getImageURI(imageURI) { 

    //resolve file system for image to move. 
    window.resolveLocalFileSystemURI(imageURI, gotFileEntry, function(error){onfail(error,'Get Target Image')}); 


    function gotFileEntry(targetImg) { 
     //alert("got image file entry: " + targetImg.name);  
     //now lets resolve the location of the destination folder 
     window.resolveLocalFileSystemURI(POSTPATH, gotDestinationEntry, function(error){onfail(error,'Get Destination Dir')}); 
     function gotDestinationEntry(destination){ 
      // move the file 
      targetImg.moveTo(destination, targetImg.name, moveSuccess, function(error){onfail(error,'Move Image')}); 
       alert('dest :'+destination.fullPath); 
      }; 

    function moveSuccess(){ 
     alert('FILE MOVE SUCCESSFUL!'); 
    }; 
}; //getImageURI 

кредит на: nbk в группе разговора Google.

+0

Это немного запутанно, не так ли? Почему он не может быть реализован как метод с двумя параметрами, отURI и toURI. Я не подхожу к вашему решению, просто задаюсь вопросом, почему было бы не так, и если это возможно? –

+1

Я получаю ошибку на window.resolveLocalFileSystemURI(). –

0

Мне кажется, вам нужно зафиксировать изображение как FILE_URL, и сначала сохранить изображение на SD-карте, как упоминалось выше, Стивеном Бенджамином.

Тогда вы можете retrive в base64 DATA_URL, как

function readFile() { // button onclick function 
    var gotFileEntry = function(fileEntry) { 
     console.log("got image file entry: " + fileEntry.fullPath); 
     fileEntry.file(function(file) { 
      var reader = new FileReader(); 
      reader.onloadend = function(evt) { 
       console.log("Read complete!"); 
       image64.value = evt.target.result; 
      }; 
      reader.readAsDataURL(file); 
     }, failFile); 
    }; 
    window.resolveLocalFileSystemURI("file:///mnt/sdcard/test.jpg", gotFileEntryImage, function(){console.log("* * * onPhotoURISuccess" + failed);}); 
} 
Смежные вопросы