2012-03-28 50 views
2

我使用下面的代碼獲取圖像的base64數據顯示並上傳到服務器。 但我想將這個捕獲的圖像保存在SD卡文件夾中。請幫助我做到這一點。如何在PhoneGap的移動拍攝的圖像文件夾中的SD卡

這對我來說需要獲取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的」,而不是在successed SD卡的perticular位置(如SD卡/ myphotos)保存。 如何分配此路徑? 也不知道如何將base64數據保存爲phonegap中的有效圖像? 請幫忙.. – Ram 2012-03-30 07:30:50

+0

以下是使用FileWriter的一個很好的例子。 http://docs.phonegap.com/en/1.5.0/phonegap_file_file.md.html#FileWriter_full_example – 2012-04-02 20:54:41

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 

貸記:谷歌phonegap組上的nbk。

+0

這有點令人費解,不是嗎?爲什麼它不能作爲一個有兩個參數的方法來實現,從URI和toURI。我沒有選擇你的解決方案,只是想知道爲什麼不這樣做會更好,事實上如果可能的話? – 2013-01-02 17:59:47

+1

我得到window.resolveLocalFileSystemURI()錯誤。 – 2015-04-23 07:32:56

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);}); 
} 
相關問題