使用Javascript读取客户端文本文件

y2p*_*y2p 30 javascript javascript-events

我想读取一个文件(在客户端)并获取数组中的内容.它只是一个文件.我有以下,它不起作用.'query_list'是一个textarea,我想显示文件的内容.

<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>
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?最终我想循环遍历数组并运行一些SQL查询.

Jua*_*des 46

如果您想使用HTML5的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)
    }
Run Code Online (Sandbox Code Playgroud)

对于IE <10支持,您需要调查使用ActiveX对象,如ADO.Stream Scripting.FileSystemObject http://msdn.microsoft.com/en-us/library/2z9ffy99(v=vs.85).aspx但是你'会遇到安全问题.如果您运行IE允许所有ActiveX对象(对于您的网站),它应该工作.

  • 根据MS的这个页面,这个方法也适用于IE10和更新版本:http://msdn.microsoft.com/en-us/library/ie/hh673542(v = vs.85).aspx (2认同)

Ant*_*rin 12

有一种HTML5 File API可以访问用户选择的本地文件,而无需将它们上传到任何地方.

这是一项非常新的功能,但大多数现代浏览器都支持它.

我强烈建议您查看这篇精彩文章,了解如何使用它.

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

如果您需要阅读大文件,或在那里搜索某些内容,或通过行索引导航,请检查我的LineNavigator,它允许您阅读,导航和搜索任何大小的文件.在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);
});
Run Code Online (Sandbox Code Playgroud)