Danilo Oliveira
Danilo Oliveira

Reputation: 159

Cordova - Save image from url into device photo gallery

I am developing an application with Apache Cordova that downloads and saves images, but I can not save and display the Gallery, the image goes to file:///data/data for while i'm trying to run on Android, what can I do?

My code:

 function download(URL, Folder_Name, File_Name) {
        //step to request a file system 
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fileSystemSuccess, fileSystemFail);

        function fileSystemSuccess(fileSystem) {
            var download_link = encodeURI(URL);
            var ext = download_link.substring(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(); // Returns Fulpath of local directory
            console.log(rootdir);
            fp = fp + "/" + Folder_Name + "/" + File_Name; // fullpath and name of the file which we want to give
            // download function call                
            filetransfer(download_link, fp);
        }

        function onDirectorySuccess(parent) {
            //alert("Sucesso");
        }

        function onDirectoryFail(error) {
            //Error while creating directory
            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();
        console.log(fp);
        // File download function with URL and local path
        fileTransfer.download(download_link, fp,
                            function (entry) {
                                //alert("download complete: " + entry.fullPath);
                            },
                         function (error) {
                             //Download abort errors or download failed errors
                             console.log(error);
                             alert(error.exception);
                             alert("download error source " + error.source);
                             //alert("download error target " + error.target);
                             //alert("upload error code" + error.code);
                         }
                    );
    }

Upvotes: 2

Views: 8207

Answers (2)

Nimesh khatri
Nimesh khatri

Reputation: 763

please try to import this plugin in your project :-

https://github.com/devgeeks/Canvas2ImagePlugin.git

Upvotes: 1

Danilo Oliveira
Danilo Oliveira

Reputation: 159

The images were being saved, but needed the Media Scanner to index the images on gallery

Media Scanner:

MediaScannerConnection provides a way for applications to pass a newly created or downloaded media file to the media scanner service. The media scanner service will read metadata from the file and add the file to the media content provider.

How was working with Apache Cordova / PhoneGap it provides no native method to refresh the images in the native gallery, I had to just look for a plugin to do this job. The plugins I found were:

cordova-mediascanner-plugin
MediaScannerPlugin

Both have a basic documentation, however i used cordova-mediascanner-plugin.

By implementing this plugin, just modified my filetransfer method

function filetransfer(download_link, fp) {
        var fileTransfer = new FileTransfer();
        console.log(fp);

        // File download function with URL and local path
        fileTransfer.download(download_link, fp,
                            function (entry) {
                                //alert("download complete: " + entry.fullPath);
                                window.plugins.scanmedia.scanFile(fp, function (msg) {
                                    alert("Success ScanMedia");
                                }, function (err) {
                                    alert("Fail ScanMedia: " + err);
                                })
                            },
                         function (error) {
                             //Download abort errors or download failed errors
                             console.log(error);
                             alert(error.exception);
                             alert("download error source " + error.source);
                             //alert("download error target " + error.target);
                             //alert("upload error code" + error.code);
                      }
                    );

    }

Upvotes: 2

Related Questions