[英]Read CSV file locally using JavaScript for IE without FileReader API
我正在尝试在客户端上读取CSV文件,我的代码在具有FileAPI的现代浏览器上可以正常工作,但是我需要找出一种支持IE8和IE9的方法。 任何帮助表示赞赏。
使用的上传控件:
<input type="file" id ="uplaodFile"/>
JS:对于Firefox:
var reader = new FileReader();
./.......
reader.readAsText(e.target.files.item(0));
对于IE:?????
“您能否详细说明将文件上传到服务器并回显它的Ajax方法,因为这就是我正在查看的内容,因此不会引起任何安全问题。” -user428747
给定一个.csv
文件,例如,来自Wikipedia的逗号分隔值-示例
CSV
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00
html
<pre></pre>
js
$(function () {
var url = "file.csv";
$.getJSON("https://query.yahooapis.com/v1/public/yql?q=select"
+ "* from csv where url='" + url + "?'"
+ "&format=json&diagnostics=true&callback=?")
.then(function (data, textStatus, jqxhr) {
var arr = [];
var len = data.query.count;
$.each(data.query.results.row, function (k, v) {
$.map(v, function (val) {
if (val === null) {
val = '""';
};
arr.push(val)
});
});
var rebuild_csv = function () {
$.when(
$("pre")
.append(
arr.splice(0, len).join(",") + "\r\n"))
.done(function () {
if (arr.length) {
rebuild_csv()
};
});
};
rebuild_csv();
}, function (jqxhr, textStatus, errorThrown) {
console.log(textStatus, errorThrown)
});
});
jsfiddle http://jsfiddle.net/guest271314/2oLmxb0g/
另请参见,以及如何使用jQuery获取附件文件的内容
没有FileReader
API支持,您将无法在本地读取文件。 您必须按照@Donal的建议使用Activex脚本,或者使用基于Flash / Java的解决方案,这些解决方案都有自己的问题。
或者,您可以切换到基于服务器端的解决方案。 服务器端解决方案包括将文件发布到服务器端API,然后该服务器端API可以解析文件并发回内容。 您可以使用基于AJAX / iFrame的方法将其包装起来,以使其在幕后发生而用户无需注意。
您可以从头开始(DIY)构建它,也可以使用filepicker.io之类的解决方案为您完成。
因此您可以调用filepicker.read()并直接获取文件的内容。 在较新的浏览器中,我们包装了HTML5 File API,但在IE8中,我们并不是那么幸运。
相反,我们让服务器读取文件并以可读格式将其发送回去。 我们使用上面的过程将文件发送到我们的服务器。 iframe,新表格等。 然后,让服务器读取内容,如果需要,将其转换为base64,然后将其发送回客户端。
DIY版本:
// grab your file object from a file input
$('#fileInput').change(function () {
uploadFile(this.files[0]);
});
function uploadFile(file) {
$.ajax({
type: 'post',
url: '/csvProcessorUrl?file=' + file.fileName,
data: file,
processData: false,
contentType: 'text/csv'
})
.done(function(csvData) {
// process csv data
});
}
注意: csvProcessorUrl
只是我为实际服务器csvProcessorUrl
点组成的虚拟名称。 一定要用合适的替换它。
您可以使用第三方库,例如: http : //blog.filepicker.io/post/33906205133/hacking-a-file-api-onto-ie8
如果不是使用IE8,IE9,则必须使用: ActiveXObject("Scripting.FileSystemObject");
例如:
var fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.OpenTextFile("c:\\foobar.txt", 1);
while (!f.AtEndOfStream)
{
var line = f.ReadLine();
// do stuff
}
f.Close();
请注意(从此处获取 ):
ActiveX对象可能会出现安全问题。 若要使用ActiveXObject,您可能需要在Internet Explorer中调整相关安全区域的安全设置。 例如,对于本地Intranet区域,通常需要将自定义设置更改为“初始化并标记未标记为安全脚本编写的ActiveX控件并对其编写脚本”。
IE 10+具有FileReader 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.