使用 Phonegap 访问文件

Posted

技术标签:

【中文标题】使用 Phonegap 访问文件【英文标题】:Access files using using Phonegap 【发布时间】:2012-05-05 12:06:10 【问题描述】:

我正在尝试使用 Phonegap[cordova 1.7.0] 在 ios 上处理文件。 我阅读了如何访问文件并在电话间隙的API Documentation 上阅读它们。但我不知道,当文件被读取时,它会被写入哪里? & 如何在 iPhone 屏幕上输出文本、图像或文本包含的任何内容?

这是我正在使用的代码:

    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);

【问题讨论】:

【参考方案1】:

从 Cordova 3.5(至少)开始,FileReader 对象仅接受 File 对象,而不接受 FileEntry 对象(我不确定以前的版本)。

这是一个将本地文件readme.txt 的内容输出到控制台的示例。这里与 Sana 示例的不同之处在于对 FileEntry.file(...) 的调用。这将提供调用FileReader.readAs 函数所需的File 对象。

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););

【讨论】:

【参考方案2】:

如果有人需要,这对我有用:

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 );
;

【讨论】:

@john_cat & oasisweng:我添加了一条评论,其中包含一个我认为可以解决您的问题的示例。 HTH! 这对我不起作用。你能告诉我我应该使用哪个版本的phonegap来运行这个源代码吗?【参考方案3】:

如果您使用的是phonegap(Cordova) 1.7.0,以下页面将在iOS中工作,替换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>

【讨论】:

以上是关于使用 Phonegap 访问文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 phonegap / cordova 更改设备配置文件

Phonegap 访问“www”文件夹

Phonegap 在 iOS 中使用 File-Transfer 下载文件并在设备中访问它

访问缓存图片phonegap

如何通过绝对路径访问我的应用程序文件 - windows phone - Phonegap/Cordova

将 PDF 文件保存在其他应用程序可访问的 PhoneGap 应用程序中? (iOS)