1

我需要从本地文件系统中选择一个 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 文件转换为纯文本的最简单方法。

谢谢

4

3 回答 3

1

您正在使用 onload 事件处理程序向 reader.result 发出警报,您需要将警报移动到事件处理程序中才能使其正常工作。

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

为避免不支持 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));    
}
于 2013-01-04T15:09:07.573 回答
0

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

于 2013-01-04T15:04:59.553 回答
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" />
}

在您的控制器中,定义一个动作结果,

[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找到更多信息。

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

谢谢

于 2013-01-05T19:42:57.810 回答