1

Ich habe eine einfache Cordova Android App erstellt und versuche ein Bild von einer URL in die Bildergalerie zu laden, aber ich kann wirklich nicht herausfinden, was falsch läuft. Ich habe schon viel hier in Stackoverflow gesucht, darunter die folgenden Links:Cordova - Bild von URL zur Bildergalerie herunterladen

Phonegap - Save image from url into device photo gallery

How to save an Image object into a file in Android with Phonegap?

I cordova File Transfer-Plugin installiert haben, und versucht, das Beispiel von der offiziellen Website zu tun, aber es auch hat nicht funktioniert: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file-transfer/

habe ich versucht, zwei verschiedene Codes, die da sind:

1) Erster Versuch:

document.getElementById("myBtn").addEventListener("click", function() { 
    download("http://cordova.apache.org/static/img/cordova_bot.png", "data", "new_file"); 
}); 

function download(URL, Folder_Name, File_Name) { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fileSystemSuccess, fileSystemFail); 

    function fileSystemSuccess(fileSystem) { 
     var download_link = encodeURI(URL); 
     ext = download_link.substr(download_link.lastIndexOf('.') + 1); //Get extension of URL 

     var directoryEntry = fileSystem.root; // to get root path of directory 
     directoryEntry.getDirectory(Folder_Name, { 
      create: true, 
      exclusive: false 
     }, onDirectorySuccess, onDirectoryFail); // creating folder in sdcard 
     var rootdir = fileSystem.root; 
     var fp = rootdir.toURL(); 
     fp = fp + "/" + Folder_Name + "/" + File_Name + "." + ext; // fullpath and name of the file which we want to give 
     filetransfer(download_link, fp); 
    } 

    function onDirectorySuccess(parent) { 
     // Directory created successfuly 
    } 

    function onDirectoryFail(error) { 
     alert("Unable to create new directory: " + error.code); 
    } 

    function fileSystemFail(evt) { 
     //Unable to access file system 
     alert(evt.target.error.code); 
    } 
} 

function filetransfer(download_link, fp) { 
    var fileTransfer = new FileTransfer(); 
    fileTransfer.download(download_link, fp, 
     function (entry) { 
      alert("download complete: " + entry.fullPath); 
      //cordova.plugins.imagesaver.saveImageToGallery(entry.fullPath, successCallback, errorCallback); 
     }, 
     function (error) { 
      alert("download error source " + error.source); 
     } 
    ); 
} 

In diesem Versuch, erhalte ich die Warnmeldung „Download abgeschlossen: /my_folder/new_file.png“ aber ich kann nicht finden, wo das Bild heruntergeladen wird. Es ist definitiv nicht in der Bildergalerie oder irgendwo, wo ich es finden kann.

2) Zweiter Versuch:

function download() { 
    window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) { 

     var url = 'http://cordova.apache.org/static/img/cordova_bot.png'; 
     fs.root.getFile('downloaded-image.png', { 
      create: true, 
      exclusive: false 
     }, function (fileEntry) { 
      file_transfer(fileEntry, encodeURI(url), true); 

     }, onErrorCreateFile); 

    }, onErrorLoadFs); 
} 

function onErrorLoadFs(msg){ 
    alert(msg); 
} 

function onErrorCreateFile(msg){ 
    alert(msg); 
} 

function file_transfer(fileEntry, uri, readBinaryData) { 

    var fileTransfer = new FileTransfer(); 
    var fileURL = fileEntry.toURL(); 

    fileTransfer.download(
     uri, 
     fileURL, 
     function (entry) { 
      alert("download complete: " + entry.toURL()); 

      if (readBinaryData) { 
       // Read the file... 
       readBinaryFile(entry); 
      } else { 
       // Or just display it. 
       displayImageByFileURL(entry); 
      } 

     }, 
     function (error) { 
      alert("download error source " + error.source); 
      alert("download error target " + error.target); 
      alert("upload error code" + error.code); 
     }, 
     null, // or, pass false 
     { 
      //headers: { 
      // "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==" 
      //} 
     } 
    ); 
} 

In diesem Versuch, erhalte ich die Warnmeldung "Download abgeschlossen: file: ///data/user/0/com.companyname.xxxxxxx/cache/downloaded -image.png ", aber ich kann das Bild auch nirgendwo im Gerät finden.

Ich habe bereits die Anwendung in zwei verschiedenen Android-Geräten ausprobiert.

+0

Ich würde empfehlen, eine eigene cordova Plugin für Sachen wie diese zu schaffen. Ich habe ziemlich viel Android-Entwicklung und Handhabung, wo Dateien ordnungsgemäß erstellt werden, ist ein B-Wort einer Zeit, und ich würde ihr Plugin damit nicht vertrauen. –

Antwort

0

sollten Sie die Zeile

window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, 
-> 
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 

und wenn Download Erfolg, sollten Sie Ihren Gerätespeicher erneut scannen, weil Cordova nicht wissen, ob die Datei heruntergeladen wird.

so machte ich ein Plugin,

Es ist ein Plugin, das die Galerie nach dem Download aktualisiert.

https://github.com/pouu69/cordova-plugin-gallery-refresh

Verwandte Themen