Copying a file using Cordova

懵懂的女人 提交于 2019-12-01 23:34:22

问题


I've been trying to copy file named versions.txt from applicationDirectory to externalApplicationStorageDirectory using cordova but code fails.

here is the code

var path = cordova.file.applicationDirectory + "www/Data/versions.txt";

      window.resolveLocalFileSystemURL(path,
      function gotFile(fileEntry)
      {

          window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
              function onSuccess(fileSystem)
              { 
                      var directory = new DirectoryEntry("versions.txt", path);

                      fileEntry.copyTo(directory, 'versions.txt',
                          function()
                          {
                              alert('copying was successful')
                          },
                          function()
                          {
                              alert('unsuccessful copying')
                          });

              }, null);
      },null);

Any help?


回答1:


now it works, target directory should be resolved.

here is the solution

window.resolveLocalFileSystemURL(cordova.file.externalApplicationStorageDirectory,
                      function onSuccess(dirEntry)
                      {
                          //alert(JSON.stringify(dirEntry));

                          fileEntry.copyTo(dirEntry, 'versions.txt',
                              function()
                              {
                                  alert('copying was successful')
                              },
                              function()
                              {
                                  alert('unsuccessful copying')
                              });
                      }, null);



回答2:


The fileEntry.copyTo somehow always gave error, so I tried the fileEntry.moveTo as below, which works well for me in copying any file from the www into say the Library folder of the iOS device.

function copyToLocation(fileName){       
console.log("Copying :"+fileName);
    window.resolveLocalFileSystemURL(cordova.file.applicationDirectory+"www/"+fileName,function (fileEntry)
    {
        window.resolveLocalFileSystemURL(cordova.file.dataDirectory,function (directory)
        {                  
           fileEntry.moveTo(directory, 'new_fileName.txt',function(){
                alert('Successful Copy!');
            },
            function()
            {
                alert('Copying Unsuccessful ');
            });
        },null);
    }, null);
 }



回答3:


I finally got a functioning broader no specific/case function to copy a file having a baseFileURI to a temporary (fileSystem == LocalFileSystem.TEMPORARY) or persistent (fileSystem == LocalFileSystem.PERSISTENT) APP directory, the destiny file having the name destPathName.

It uses the cordova-plugin-file plugin.

function copyFile(baseFileURI, destPathName, fileSystem){
    window.resolveLocalFileSystemURL(baseFileURI, 
        function(file){        
            window.requestFileSystem(fileSystem, 0, 
                function (fileSystem) {
                    var documentsPath = fileSystem.root;
                    console.log(documentsPath);
                    file.copyTo(documentsPath, destPathName,
                    function(res){                        
                        console.log('copying was successful to: ' + res.nativeURL)
                    }, 
                    function(){
                        console.log('unsuccessful copying')
                    });
                });
        }, 
        function(){
            console.log('failure! file was not found')
        });
}

Use this function, for example, like this

copyFile("file:///storage/emulated/0/Android/data/com.form.parking.violation/cache/IMG-20180505-WA0004.jpg",         
        "myImg.jpg",
        LocalFileSystem.TEMPORARY); 



回答4:


Served my source code to the PhoneGap developer app. My file copy code is below.

   //COPY FILE
   var wwwDirEntry;

   //resolve url for directory entry for putting in copied file
   window.resolveLocalFileSystemURL(cordova.file.dataDirectory+'phonegapdevapp/www/', function success(dirEntry) {
       wwwDirEntry = dirEntry;
   });

   //resolve file URL to file entry to enable copying
   //
   //Desired URL: file:///data/user/0/com.adobe.phonegap.app/files/phonegapdevapp/www/my_awesome_file.doc
   //BASE URL: cordova.file.dataDirectory / file:///data/user/0/com.adobe.phonegap.app/files/
   //
   //alert(JSON.stringify(cordova.file.dataDirectory));
   //
   window.resolveLocalFileSystemURL(cordova.file.dataDirectory+'phonegapdevapp/www/my_awesome_file.doc',
      function onSuccess(fileEntry)
      {
          //alert(JSON.stringify(fileEntry));
          fileEntry.copyTo(wwwDirEntry, 'a_copy_of_my_awesome_file.doc',
          function()
          {
              alert('copying was successful');
          },
          function()
          {
              alert('copying FAILED');
          });
     }, function (e) { alert(JSON.stringify(e)); });


来源:https://stackoverflow.com/questions/31548292/copying-a-file-using-cordova

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!