使用jquery将CSV文件读入字符串

时间:2013-01-04 14:36:48

标签: jquery csv

我需要从本地文件系统中选择一个csv文件,并使用jquery将该文件的内容显示为文本。

我将其用于文件上传

<input id = "uploadCSV" type = "file" /> 

关于其改变事件,

 $('#uploadCSV').change(function(e) {
 if(e.target.files != undefined) {
           var reader = new FileReader(); 
           reader.onload = function(e) {
           var lineSplit = e.target.result.split("\n");
           var commaSplit = lineSplit[0].split(",");
           var content = "";
           for(var i = 0; i < commaSplit.length; i++) {
                 var temp = commaSplit[i];
                 content = content + " " + temp;
           }
         };
         reader.readAsText(e.target.files.item(0));
         var fileContent = reader.result;
         alert(fileContent);
      }
 });

不知何故,这不起作用,当我使用Firefox时,我会在警报中获得null。如果我使用IE8,它崩溃,因为它找不到e.target.result。请指教

我正在寻找将本地文件系统中的csv文件转换为纯文本的最简单方法。

由于

3 个答案:

答案 0 :(得分:1)

您正在通过onload事件处理程序向reader.result发出警告,您需要在事件处理程序中移动警报才能使其生效。

您刚才所做的事情将在加载文件之前提醒reader.result,此时结果将为null。

为避免FileReader不受支持而导致任何错误,请在使用前检查if (window.FileReader)

将其更改为:

if ((window.FileReader) && (e.target.files != undefined)) {
  var reader = new FileReader(); 
  reader.onload = function(e) {
    var lineSplit = e.target.result.split("\n");
    var commaSplit = lineSplit[0].split(",");
    var content = "";
    for(var i = 0; i < commaSplit.length; i++) {
      var temp = commaSplit[i];
      content = content + " " + temp;
    }
    var fileContent = reader.result;
    alert(fileContent);
  };

  reader.readAsText(e.target.files.item(0));    
}

答案 1 :(得分:0)

IE中不支持FileReader&lt; 10(https://developer.mozilla.org/en-US/docs/DOM/FileReader - 请参阅底部的“浏览器支持”)。如果您的解决方案针对IE8,则无法在Javascript中执行您要执行的操作。您必须使用Flash等嵌入式应用程序,或将文件发布到服务器并返回结果。

答案 2 :(得分:0)

我可以使用asp.net mvc来解决这个问题。有关详细信息,请参见下文

@using(Html.BeginForm("ProcessCsv","<YourControllerName>",FormMethod.Post, new {enctype = multipart/form-data" }))
{
     <input id = "myUpload" type = "file" name = "fileBaseParam"/>
     <input id = "btnSubmit" type = "submit" name = "ProcessCsv" value = "Submit" />
}

在你的控制器中,定义一个actionresult,

[HttpPost]
public ActionResult ProcessCsv(HttpPostedFileBase fileBaseParam)
{
       var csvReader = new StreamReader(fileBaseParam.InputStream);
       string fileContent = csvReader.ReadToEnd();
}

HttpPostedFileBase是这里的关键概念..您可以从中找到更多相关信息 http://www.codeproject.com/Articles/442515/Uploading-and-returning-files-in-ASP-NET-MVC

希望这些信息将来会对某人有所帮助。

由于