从Google Chrome中的FileSystem下载文件

时间:2013-12-23 16:18:54

标签: javascript google-chrome download google-chrome-app

我为Google Chrome创建了一个应用程序,用于将文件存储到文件系统中。 我可以读取此文件,但每次我尝试导出它时,它都不起作用。 我尝试了一些方法:

但它们不起作用。

Replacement for fileEntry.toURL() in Chrome Packaged Apps谈论我的问题.. 所以我把代码改成了

function readFileRdf() {
    window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(filesystem) {
      fs = filesystem;
      fs.root.getFile('rdf.txt', {create: false}, function(fileEntry) {
      // Get a File object representing the file,
      // then use FileReader to read its contents.
        fileEntry.file(function(file) {
          var reader = new FileReader();
          reader.onloadend = function(e) {
            fromFileSystemRdf = e.target.result;
            arr = fromFileSystemRdf;
            exportRdf(arr);
          };
          reader.readAsText(file);
        }, errorHandler);
      }, errorHandler);
});
}

function exportRdf(arr){
  console.log(arr);
  chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
    writableFileEntry.createWriter(function(writer) {
      writer.onerror = errorHandler;
      writer.onwriteend = function(e) {
        console.log('write complete');
      };
      console.log(arr);
      writer.write(new Blob([arr], {type: 'text/plain'}));  
    }, errorHandler);
});
}

最后一个问题是我在 createWriter

时遇到错误

响应fileSystem.chooseEntry时出错:TypeError:无法调用未定义的方法'createWriter'

Up ..添加一个console.log(chrome.runtime.lastError);它说

对象{消息:“无效的呼叫页面。无法从后台页面调用此功能。”}

问题解决了。 由于无法从后台页面调用方法,我使用了这个解决方案: (请记住,Google Chrome不接受内联javascript)

按下导出按钮

`document.getElementById("button2").addEventListener("click",readFileRdf);`

方法readFileRdf创建一个新页面:

function readFileRdf() {
    chrome.app.window.create("data.html");
}

data.html 调用data.js文件

 <!DOCTYPE html>
    <html>
          <head>
             <meta charset="utf-8">
             <title>Data page</title>
          </head>

          <body>
          </body>

          <script rel="text/javascript" src="data.js"></script>  
        </html>

data.js 允许用户从文件系统中读取文件并下载

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;

function initFs() {
  window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(filesystem) {
      fs = filesystem;
      readFile(fs);
   }, errorHandler);
}

function readFile(fs) {
    fs.root.getFile('rdf.txt', {create: false}, function(fileEntry) {
      // Get a File object representing the file,
      // then use FileReader to read its contents.
        fileEntry.file(function(file) {
          var reader = new FileReader();
          reader.onloadend = function(e) {
            fromFileSystemRdf = e.target.result;
            arr = fromFileSystemRdf;
            exportRdf(arr);
          };
          reader.readAsText(file);
        }, errorHandler);
      }, errorHandler);
}

function exportRdf(arr){
  console.log(arr);
  chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
    console.log(chrome.runtime.lastError);
    writableFileEntry.createWriter(function(writer) {
      writer.onerror = errorHandler;
      writer.onwriteend = function(e) {
        console.log('write complete');
      };
      writer.write(new Blob([arr], {type: 'text/plain'}));  
    }, errorHandler);
});
}

initFs();

0 个答案:

没有答案