2016-06-05 7 views
0

Ich arbeite an einer Onsen/Cordova Mobile App, mit Monaca für die Entwicklung und ein Android-Handy zum Testen, die Bilder an die Ausgabe von der App anhängen. Ich habe diesen Code ein Bild zu machen und kopieren Sie sie in cordova.file.dataDirectory:Verschieben eines Fotos in lokale Datenverzeichnis in Onsen/Cordova App

navigator.camera.getPicture(
    function(imgUri) { // Success callback 
     // Get FileEntry object for the new photo 
     window.resolveLocalFileSystemURL(
     imgUri, 
     function(fileEntry){ 
      alert('Success - Before: ' + JSON.stringify(fileEntry)); 
      newFileName = fileEntry.name; 
      window.resolveLocalFileSystemURL(cordova.file.dataDirectory, 
       function(dirEntry) { 
        // move the file to a new directory and rename it 
        fileEntry.moveTo(dirEntry, newFileName, function success() { 
         alert('Copy operation successful - After moving: ' + JSON.stringify(fileEntry) 
          + '\nURL: ' + fileEntry.toURL()); 
         $scope.photos.unshift(fileEntry.toURL()); 
         $scope.$apply(); 
        }, 
        function failure(){ 
         alert('Failed to move file.'); 
        }); 
       }, 
       function failure(){ 
        alert('Failed to get local FS for data directory.'); 
       }); 
     }, 
     function failure(){ 
      alert('Failed to get local FS for new image.'); 
     }); 
    }, 
    function() { // Error callback 
     // We end up here if the photo selection/shoot is cancelled. So we do nothing. 
     return; 
    }, 
    opts // Options 
); 

Was passiert, ist leider, dass, obwohl alle Erfolg Rückrufe ausgelöst werden, die Warnungen den gleichen Weg für ein Foto anzuzeigen, bevor und nach dem Verschieben - file: //storage/emulate/0/Android/data/mobi.monaca.debugger/cache/ - während der Pfad zu cordova.file.dataDirectory ist file: /// data/user/0/mobi.monaca.debugger.files/.

Was ist falsch in diesem Code?

Antwort

1

Haben Sie auch 'copyTo' anstelle von 'moveTo' versucht? Ich habe meinen alten Code gelesen und ich habe gesehen, dass ich copyTo verwende. Ich erinnere mich an die MoveTo wurden vom Betriebssystem blockiert (irgendwo googlin es lesen), aber ehrlich gesagt weiß ich nicht, für welche Android-Versionen. Wenn die 'copyTo'-Funktion für Sie funktioniert, könnte dies der Grund sein.

EDIT: Dies ist mein Arbeitscode. Überprüfen und Unterschiede sehen (Dateisystem vielleicht?)

function manipulate_img_url(fileUri) { 
    console.log("fileUri: "+fileUri); 
    window.requestFileSystem(PERSISTENT, 0, function(fileSystem) { 
     window.resolveLocalFileSystemURL(
      fileUri, 
      function(fileEntry){ 
       console.log("Start elaboration: "+JSON.stringify(fileEntry)); // This give me the native url: 'nativeURL':"file:///storage/emulated/0/Android/data/com.intel.appx.RotarApp.xwalk15/cache/1465151572273.jpg" 
       newFileUri = cordova.file.dataDirectory + "images/"; 
       console.log("newFileUri: "+newFileUri); 
       oldFileUri = fileUri; 
       console.log("oldFileUri: "+oldFileUri); 
       fileExt  = oldFileUri.split('.').pop(); 
       console.log("fileExt: "+fileExt); 

       newFileName = "my_avatar" + fileExt; 
       console.log("newFileName: "+newFileName); 
       window.resolveLocalFileSystemURL(cordova.file.dataDirectory, 
         function(dirEntry) { 
          // move the file to a new directory and rename it 
          fileEntry.copyTo(dirEntry, newFileName, successCallback, errorCallback); 
         }, 
         errorCallback); 
      }, 
      errorCallback); 
    }, function(e) { 
     console.error('Error requesting file system: '+ e.code); 
    }); 
} 
function successCallback(entry) { 
    console.log("entry: "+JSON.stringify(entry)); 
    console.log("New Path: " + entry.fullPath); 
    console.log("native url: "+entry.nativeURL); // <<--- this is the new url: file:///data/data/com.intel.appx.RotarApp.xwalk15/files/my_avatar.jpg 
} 
+0

Leider scheint das Ergebnis das gleiche zu sein. Nur die Erfolgsrückrufe werden ausgelöst, aber der Pfad bleibt vor und nach copyTo gleich. Und es ist nicht dasselbe wie cordova.file.dataDirectory. – Btz

Verwandte Themen