Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

plugin cordova-plugin-file

Pessoal boa noite, estou construindo uma aplicação que precisará armazenar dados em arquivo de texto e ao usar e api cordova-plugin-file eu consegui criar o arquivo mas não consigo acha-lo no meu diretório, segue abaixo a função que faz a criação do arquivo de texto "log.txt", alguém saberia em qual diretório possa estar esse arquivo, a documentação fala que ele cria esse arquivo no diretório raiz, mas eu não o acho. Obrigado

function onInitFs(fs) {
  console.log('Opened file system: ' + fs.name);
    fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) {

    console.log(fileEntry.isFile); //fileEntry.isFile === true
    console.log(fileEntry.name ); // fileEntry.name == 'log.txt'
    console.log(fileEntry.fullPath); // fileEntry.fullPath == '/log.txt'
  }, errorHandler);
}
4 respostas

Acho que faltou chamar o writeFile(fileEntry,null) no callback. De acordo com a documentacao:

https://github.com/apache/cordova-plugin-file#create-a-persistent-file-

Maravilha, mas não é essa minha dúvida, minha dúvida seria a respeito do arquivo criado, onde está?, em qual pasta?, pelo que andei pesquisando fica em uma passa que o usuário não tem acesso a não ser que tenha feito root no celular para acessar o arquivo criado, existe alguma forma de criar um arquivo onde o usuário possa ter acesso?

solução!

Imagino que vc esteja falando de Android (pq no iOS o usuario nao tem acesso ao sistema de arquivos nunca). Dá pra criar usando o externalApplicationStorageDirectory a hora que vc chama o resolveLocalFileSystemURL

https://www.npmjs.com/package/cordova-plugin-file#android-file-system-layout

Eu peguei o exemplo da documentação oficial e tudo mais... e mais os posts de vocês aqui, mas, quando eu seleciono uma imagem o Álbum ou Câmera, o Cordova cria na pasta (cordova.file.externalDataDirectory) um "tempFile.jpg" apenas com 14Bytes, sendo que a imagem original tem 200KB e a qualidade foi configurada para ter 50% pelo menos.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){  
    var filePath;
    var ofileEntry;

    function returnCodAlun(){
        var iduser = +localStorage.getItem('scbabyc_12_user');
        var ls = JSON.parse(localStorage.getItem('scbabyc_childs'));
        return +ls[iduser].codAlun;
    };

    function setOptions( srcType ){
        var options = {
            sourceType: srcType,
            quality: 50,
            destinationType: Camera.DestinationType.FILE_URI,
            encodingType: Camera.EncodingType.JPG,
            mediaType: Camera.MediaType.PICTURE,
            allowEdit: true,
            correctOrientation: true 
        }
        filePath = options.destinationType;
        return options;
    };

    function onErrorResolveUrl( e ){
        console.error('onErrorResolveUrl');
    };

    function onErrorCreateFile( e ){
        console.error('onErrorCreateFile');
    };

    function createNewFileEntry( imgUri ){
        window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function success( dirEntry ){
            dirEntry.getFile('tempFile.jpg',{create: true, exclusive: false },function( fileEntry ){
                ofileEntry = fileEntry;
                writeFile(fileEntry);
            }, onErrorCreateFile);
        }, onErrorResolveUrl);
    };

    function writeFile( fileEntry, dataObj ){
        // Create a FileWriter object for our FileEntry (log.txt).
        fileEntry.createWriter(function( fileWriter){

            fileWriter.onwriteend = function(){
                readFile(fileEntry);
            };

            fileWriter.onerror = function( e ){
                console.log("Failed file write: " + e.toString());
            };

            if( !dataObj )
                dataObj = new Blob(['some file data'], { type: 'text/plain' });

            fileWriter.write(dataObj);

        });
    }

    //pegar foto dos álbuns
    function openFilePicker(){
        var options = setOptions(Camera.PictureSourceType.PHOTOLIBRARY);
        navigator.camera.getPicture(function cameraSuccess( imageUri ){
            displayImage(imageUri);
            createNewFileEntry(imageUri);
        },function cameraError( error ){
            console.debug("Unable to obtain picture: " + error, "app");
        }, options);
    };

    //tirar foto com a câmerda
    function openCamera(){
        var options = setOptions(Camera.PictureSourceType.CAMERA);
        navigator.camera.getPicture(function cameraSuccess( imageUri ){            
            displayImage(imageUri);
            createNewFileEntry(imageUri);
        }, function cameraError(error) {
            console.debug("Unable to obtain picture: " + error, "app");
        }, options);
    };

    //
    function uploadPhoto(){

        var serviceURL = encodeURI('minhaurl/upload.php');        
        var fileURL = ofileEntry.nativeURL;

        var options = new FileUploadOptions();
            options.fileKey = 'file';
            options.fileName = 'receita'+ Math.floor(new Date/1000);
            options.mimeType = 'image/jpg';
            options.chunkedMode = false;
            options.headers = {
                Authorization : smbaby_token,
            };
        var params = new Object();
            params.co00Apme = "2";
            params.codAlun = returnCodAlun();
            options.params = params;

        var ft = new FileTransfer();
            ft.upload(fileURL,serviceURL,function( result ){
                alert(JSON.stringify(result));
                //$(document).trigger('submitRecipe-done',[true]);
            }, function(error){
                alert(JSON.stringify(error));
                //$(document).trigger('submitRecipe-done',[false]);
            }, options, true);
    }

    //mostra o preview
    function displayImage( imgUri ) {        
        $('#js-previewFile').attr('src',imgUri).parent().addClass('is-visible'); 
    }

    $(document).on('submitRecipe',function(){
        uploadPhoto();
    });

    $('#js-openFilePicker').on('click',function(){
        openFilePicker();
    });

    $('#js-openCamera').on('click',function(){
        openCamera();
    });

}