Come si conserva un file in locale utilizzando Apache Cordova 3.4.0

? Nathan @ | Original: StackOverFlow
---

Sto avendo un problema memorizzazione di un file localmente su un dispositivo iOS ( o Android ) tramite plug " file" apache di Cordova . Il problema credo che è l'impostazione corretta del percorso .

questo è il messaggio di errore che ricevo da Xcode Impossibile creare il percorso per salvare il file scaricato : Il couldnU2019t operazione completata . ( Cocoa errore 512. )

Ecco il codice in cui sto cercando di salvare il file in locale :

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">


document.addEventListener("deviceready", onDeviceReady, false);

var root;


function onDeviceReady(){
    // Note: The file system has been prefixed as of Google Chrome 12:
    window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onInitFs, errorHandler);
}

function onInitFs(fs) {


    var fileURL = "cdvfile://localhost/persistant/file.png";

    var fileTransfer = new FileTransfer();
    var uri = encodeURI("http://upload.wikimedia.org/wikipedia/commons/6/64/Gnu_meditate_levitate.png");

    fileTransfer.download(
            uri,
            fileURL,
            function(entry) {
                console.log("download complete: " + entry.fullPath);
            },
            function(error) {
                console.log("download error source " + error.source);
                console.log("download error target " + error.target);
                console.log("upload error code" + error.code);
            },
            false,
            {
                headers: {
                    "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
                }
            }
    );
}


function errorHandler(e) {
  var msg = '';

  switch (e.code) {
    case FileError.QUOTA_EXCEEDED_ERR:
      msg = 'QUOTA_EXCEEDED_ERR';
      break;
    case FileError.NOT_FOUND_ERR:
      msg = 'NOT_FOUND_ERR';
      break;
    case FileError.SECURITY_ERR:
      msg = 'SECURITY_ERR';
      break;
    case FileError.INVALID_MODIFICATION_ERR:
      msg = 'INVALID_MODIFICATION_ERR';
      break;
    case FileError.INVALID_STATE_ERR:
      msg = 'INVALID_STATE_ERR';
      break;
    default:
      msg = 'Unknown Error';
      break;
  };

  alert('Error: ' + msg);
}

</script>
---

Top 5 Risposta

1bottus @

Scopri questi link :

http://cordova.apache.org/docs/en/3.4.0/cordova_plugins_pluginapis.md.html#Plugin%20APIs  https://github.com/apache/cordova-plugin-file/blob/dev/doc/index.md

http://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#File

Collegamenti Primo e secondo forniscono informazioni sul file plugin e come installarlo .

Il terzo si mostrano come usare il plugin file .

Ogni volta è necessario fare qualcosa con Cordova, verificare se un plugin è disponibile a farlo :)

regards.

2ar34z @

Il tuo percorso di file contiene un errore di battitura ( o un errore grammaticale ) :

var fileURL = " cdvfile : //localhost/persistant/file.png " ;

Si dovrebbe scrivere come persistente .

Correct code:

var fileURL = "cdvfile://localhost/persistent/file.png";
3Abram @

Finora ho provato solo questo su Android, ma credo che dovrebbe funzionare così com'è, o con poche modifiche su IOS :

var url = 'example.com/foo'

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
    fileSystem.root.getFile('foo_file', {create: true, exclusive: false},
        function(file_entry){
            var ft = new FileTransfer()
            ft.download(url, file_entry.toURL(), function(fe){
                fe.file(function(f){
                    reader = new FileReader()
                    reader.onloadend = function(ev){
                        console.log('READ!', ev.target.result)
                    }
                    reader.readAsText(f)
                })
            })
        }
    )
})

Si noti che anche bisogno il contenuto del file, in modo che il po 'alla fine può essere omesso se non è necessario il contenuto, al momento del download .

Si noti inoltre che vi è un metodo molto semplice usando window.saveAs ma è disponibile solo in Android 4.4 .