2016-09-29 186 views
0

我正在嘗試使用JavaScript和Google Chrome應用讀取本地文件(我認爲它可能無法通過Chrome瀏覽器),但我看不到最新的解決方法。Javascript,FileReader vs XMLHttpRequest讀取本地文件?

我可以用下面的代碼閱讀:

obj.read = function() { 
    return new Promise(function(resolve){ 
     var xmlhttp = new XMLHttpRequest(); 
     var file_path = 'file_name.xml'; 
     xmlhttp.open('GET', file_path, true); 
     xmlhttp.send(null); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       let xml = xmlhttp.responseText; 
       var parser = new DOMParser(); 
       var xmlDoc = parser.parseFromString(xml, "text/xml"); 
       console.log(xml); 
       console.log(xmlDoc); 
       resolve(xmlDoc); 
      } 
     } 
    }); 
}; 

但它是像我應該使用類似

var reader = new FileReader(); 
reader.onload = (function(theFile) { 
    return function(e) { 
     console.log(e.target.result); 
    }; 
})(file_path); 

var file_path = 'file_name.xml'; 
var file_parts = [ 
    new Blob(['you construct a file...'],{type: 'text/plain'}), 
    'Same way as you do with blob', 
    new Uint16Array([33]) 
]; 
var file = new File(file_parts, file_path); 
reader.readAsText(file); 

(從https://stackoverflow.com/a/24495213/826815複製) (我有一個硬找到關於此主題的文獻)

那麼,怎麼做呢?

+0

有幾件事不清楚:1)「我可以用下面的代碼讀取它」 - 那爲什麼不是一個好方法?你爲什麼要改變它? 2)你的意思是什麼「本地文件」?您的示例適用於應用程序包內的文件。這就是你需要的一切嗎? – Xan

+0

1)這就是問題,這是「好」的方法?有沒有第二種方法?如果是這樣,我應該選擇哪一個? 2)通過本地文件我的意思是一個文件位於應用程序所在的同一個文件夾中,但由於我還沒有打包它,我只能猜測它會在應用程序的包中 – Gerard

回答

2

第一種方法(包中文件的XMLHttpRequest)是完全有效的,如果你需要的只是整個文件,可能會更容易。


你所謂的「第二種方法」是從大約問題實例一個File對象,不讀書的實際文件解除。這不會允許您讀取現有文件,只需創建可用於DOM表單的「虛擬」文件即可。

還有整個HTML FileSystem API,除了Chrome之外,其他地方都沒有實現,因爲這樣的文檔很稀缺,充滿了可怕的紅色警告。你可以實際上用於你陳述的目的 - 閱讀App自己的文件 - 從​​開始,但這可能是在你的特定情況下矯枉過正,你會很難找到這樣做的例子。

我能想到的只有兩個理由去打擾這是對應用程序本身的文件FileSystem API獸的睡眠:

  1. 你不知道,在運行時,都包括哪些文件。那麼你可以use it to list files。罕見,但可能。
  2. 您需要比「讓我看完整個東西」更細粒度的訪問,例如,您只需要一大塊大文件。

請注意,FileSystem API主要用於Chrome的chrome.fileSystem應用程序API。考慮到Chrome將在Chrome操作系統上支持Chrome應用一段時間,但它很可能會保留,儘管它不是標準的。

生存文檔:

相關問題