2012-05-05 10 views
5

Estoy tratando de trabajar con archivos en IOS, usando Phonegap [cordova 1.7.0]. He leído cómo acceder a los archivos y leerlos en el API Documentation de la brecha del teléfono. Pero no sé, cuando se lea el archivo, ¿dónde se escribirá? & ¿Cómo puedo mostrar el texto, la imagen o lo que sea que contenga el texto en la pantalla del iPhone?Acceder a archivos usando Phonegap

Aquí está el código que estoy usando:

function onDeviceReady() { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
} 

function gotFS(fileSystem) { 
    fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail); 
} 

function gotFileEntry(fileEntry) { 
    fileEntry.file(gotFile, fail); 
} 

function gotFile(file){ 
    readDataUrl(file); 
    readAsText(file); 
} 

function readDataUrl(file) { 
    var reader = new FileReader(); 
    reader.onloadend = function(evt) { 
     console.log("Read as data URL"); 
     console.log(evt.target.result); 
    }; 
    reader.readAsDataURL(file); 
} 

function readAsText(file) { 
    var reader = new FileReader(); 
    reader.onloadend = function(evt) { 
     console.log("Read as text"); 
     console.log(evt.target.result); 
    }; 
    reader.readAsText(file); 
} 

function fail(evt) { 
    console.log(evt.target.error.code); 
} 

Respuesta

4

Eso es lo que funcionó para mí en caso de que alguien lo necesita:

function ReadFile() { 
    var onSuccess = function (fileEntry) { 
    var reader = new FileReader(); 
    reader.onloadend = function (evt) { 
     console.log("read success"); 
     console.log(evt.target.result); 
     document.getElementById('file_status').innerHTML = evt.target.result; 
    }; 
    reader.onerror = function (evt) { 
     console.log("read error"); 
     console.log(evt.target.result); 
     document.getElementById('file_status').innerHTML = "read error: " + evt.target.error; 
    }; 

    reader.readAsText(fileEntry); // Use reader.readAsURL to read it as a link not text. 
    }; 

    console.log("Start getting entry"); 
    getEntry(true, onSuccess, { create: false }); 
}; 
+1

¿Dónde puedo especificar el archivo que quiero leer? – donkey

+0

+1 ¿Dónde especifico el archivo? –

+0

@john_cat & oasisweng: He agregado un comentario con un ejemplo que creo que responde a su pregunta. HTH! – sherb

3

Si está usando PhoneGap (Córdoba) 1.7.0, página siguiente funcionará en iOS, reemplace siguiente plantilla en index.html

<!DOCTYPE html> 
<html> 
    <head> 
    <title>FileWriter Example</title> 
    <script type="text/javascript" charset="utf-8" src="cordova-1.7.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

    // Wait for Cordova to load 
    // 
    document.addEventListener("deviceready", onDeviceReady, false); 

    // Cordova is ready 
    // 
    function onDeviceReady() { 
     window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
    } 

    function gotFS(fileSystem) { 
     fileSystem.root.getFile("readme.txt", {create: true, exclusive: false}, gotFileEntry, fail); 
    } 

    function gotFileEntry(fileEntry) { 
     fileEntry.createWriter(gotFileWriter, fail); 
    } 

    function gotFileWriter(writer) { 
     writer.onwriteend = function(evt) { 
      console.log("contents of file now 'some sample text'"); 
      writer.truncate(11); 
      writer.onwriteend = function(evt) { 
       console.log("contents of file now 'some sample'"); 
       writer.seek(4); 
       writer.write(" different text"); 
       writer.onwriteend = function(evt){ 
        console.log("contents of file now 'some different text'"); 
       } 
      }; 
     }; 
     writer.write("some sample text"); 
    } 
    function fail(error) { 
     console.log(error.code); 
    } 
    </script> 
    </head> 
    <body> 
    <h1>Example</h1> 
    <p>Write File</p> 
    </body> 
</html>
+1

Muchas gracias =) Pero yo estaba pidiendo la función de lectura =) –

+1

@sana fresco ..... –

+0

Pero en realidad Gracias =)) –

5

Como de Córdoba 3.5 (por lo menos), FileReader objetos solo aceptan objetos File, no objetos FileEntry (no estoy seguro de versiones anteriores).

Aquí hay un ejemplo que generará el contenido de un archivo local readme.txt en la consola. La diferencia aquí del ejemplo de Sana es la llamada al FileEntry.file(...). Esto proporcionará el objeto File necesario para la llamada a las funciones FileReader.readAs.

function readFile() { 
    window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 0, function(fileSystem) { 
     fileSystem.root.getFile('readme.txt', 
      {create: false, exclusive: false}, function(fileEntry) { 
       fileEntry.file(function(file) { 
        var reader = new window.FileReader(); 
        reader.onloadend = function(evt) {console.log(evt.target.result);}; 
        reader.onerror = function(evt) {console.log(evt.target.result);}; 
        reader.readAsText(file); 
       }, function(e){console.log(e);}); 
      }, function(e){console.log(e);}); 
    }, function(e) {console.log(e);}); 
} 
Cuestiones relacionadas