Como você armazenar um arquivo localmente usando Apache Cordova 3.4.0

? Nathan @ | Original: StackOverFlow
---

Estou tendo um problema armazenar um arquivo localmente em um dispositivo iOS (ou Android) usando plug-in "file" apache do cordova. O problema, creio, é definir o caminho corretamente.

esta é a mensagem de erro que recebo de Xcode Não foi possível criar caminho para salvar o arquivo baixado : O couldnU2019t operação ser concluída. (Erro Cocoa 512. )

Aqui está o código onde eu estou tentando salvar o arquivo localmente:

<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 Responder

1bottus @

Confira estes links:

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

Links de primeiro e segundo fornecer-lhe informações sobre o arquivo plugin e como instalá-lo .

O terceiro mostrar-lhe como usar o plugin do Arquivo .

Toda vez que você precisa fazer algo com Cordova, verifique se o plugin está disponível para fazê-lo :)

regards.

2ar34z @

Seu caminho do arquivo contém um erro de digitação ( ou um erro de gramática) :

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

Você deve escrevê-lo como persistente.

Correct code:

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

Até agora eu só testei isso no Android, mas eu acredito que deve funcionar como está, ou com pouca modificação no 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)
                })
            })
        }
    )
})

Note que eu também precisava de o conteúdo do arquivo, assim que a pouco no final pode ser omitido se você não precisa o conteúdo no momento da descarga .

Observe também que existe um método muito mais simples usando window.saveAs mas ele só está disponível em Android 4.4.