【问题标题】:Reading client side text file using Javascript使用Javascript读取客户端文本文件
【发布时间】:2011-06-24 10:45:00
【问题描述】:

我想读取一个文件(在客户端)并获取数组中的内容。这将只是一个文件。我有以下内容,但它不起作用。 'query_list' 是一个文本区域,我想在其中显示文件的内容。

<input type="file" id="file" name="file" enctype="multipart/form-data"/>

    <script>
       document.getElementById('file').addEventListener('change', readFile, false);

       function readFile (evt) {
           var files = evt.target.files;
           var file = files[0];

          var fh = fopen(file, 0);
          var str = "";
          document.getElementById('query_list').textContent = str;
          if(fh!=-1) {
             length = flength(fh);        
             str = fread(fh, length);     
             fclose(fh);                   
           } 
           document.getElementById('query_list').textContent = str;
        }
      </script>

我应该怎么做?最终我想遍历数组并运行一些 SQL 查询。

【问题讨论】:

  • spec here 中有一个 getAsText 函数,它完全可以满足您的要求。
  • Waitaminute - SQL 查询?客户端??

标签: javascript dom-events


【解决方案1】:

如果您想在客户端使用HTML5's FileReader读取文件,您必须使用Firefox、Chrome或IE 10+。如果是这样,下面的例子会在客户端读取一个文本文件。

您的示例尝试使用我从未听说过的 fopen(在客户端)

http://jsfiddle.net/k3j48zmt/

   document.getElementById('file').addEventListener('change', readFile, false);

   function readFile (evt) {
       var files = evt.target.files;
       var file = files[0];           
       var reader = new FileReader();
       reader.onload = function(event) {
         console.log(event.target.result);            
       }
       reader.readAsText(file)
    }

对于 IEhttp://msdn.microsoft.com/en-us/library/2z9ffy99(v=vs.85).aspx,但您会遇到安全问题。如果您运行的 IE 允许所有 ActiveX 对象(对于您的网站),它应该可以工作。

【讨论】:

【解决方案2】:

嗯,我得到了答案,但它不同:

<input type="file" id="fi" />
<button onclick="handleFile(); return false;">click</button>

function handleFile() {
    var preview = document.getElementById('prv')
    var file = document.getElementById('fi').files[0];
    var div = document.body.appendChild(document.createElement("div"));
    div.innerHTML = file.getAsText("utf-8");
}

这将适用于 FF 3.5 - 3.6,仅此而已。 FF 4 和 WebKit 你需要使用 Juan Mendes 提到的 FileReader。

对于 IE,您可能会找到 Flash 解决方案。

【解决方案3】:

我在那里工作,但仍然想做出贡献,因为它运作良好:您可以使用 filepicker.io read api 来完成这项工作。即使在 IE8+ 中,你也可以传入一个 dom 元素并取回文本或二进制数据的内容

【讨论】:

  • 这看起来不错,但你应该展示一个例子,否则,它应该是一个评论
  • 更不用说您必须付费订阅才能使用他们的 API。
【解决方案4】:

有诸如HTML5 File API之类的东西可以访问用户选择的本地文件,而无需将它们上传到任何地方。

这是一个相当新的功能,但是supported by most of modern browsers

我强烈建议您查看此great article 以了解如何使用它。

这样做有一个问题,您无法读取大文件(约 400 MB 或更大),因为直接的 FileAPI 函数试图将整个文件加载到内存中。

如果您需要阅读大文件,或在那里搜索某些内容,或通过行索引检查my LineNavigator 导航,它允许您阅读、导航和搜索任何大小的文件。 Try it in jsFiddle! 超级好用:

var navigator = new FileNavigator(file);    

navigator.readSomeLines(0, function linesReadHandler(err, index, lines, eof, progress) {    
    // Some error
    if (err) return;

    // Process this line bucket
    for (var i = 0; i < lines.length; i++) {
        var line = lines[i]; 
        // Do something with it
    }

    // End of file
    if (eof) return;

    // Continue reading
    navigator.readSomeLines(index + lines.length, linesReadHandler);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多