我想读取一个文件(在客户端)并获取数组中的内容。它只是一个文件。我有以下,它不起作用。 '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>
我应该怎么做?最终我想循环遍历数组并运行一些SQL查询。
答案 0 :(得分:42)
如果您想使用HTML5's FileReader在客户端上阅读文件,则必须使用Firefox,Chrome或IE 10+。如果是,则以下示例将读取客户端上的文本文件。
您的示例尝试使用我从未听说过的fopen(在客户端上)
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)
}
对于IE&lt; 10支持,您需要考虑使用像ADO.Stream Scripting.FileSystemObject http://msdn.microsoft.com/en-us/library/2z9ffy99(v=vs.85).aspx之类的ActiveX对象,但是您将遇到安全问题。如果您运行IE允许所有ActiveX对象(对于您的网站),它应该可以工作。
答案 1 :(得分:11)
有 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);
});
答案 2 :(得分:1)
嗯,我得到了答案,但它有所不同:
<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 :(得分:1)
我在那里工作,但仍然想要贡献,因为它运作良好:您可以使用filepicker.io read api来做到这一点。您可以传入一个dom元素并获取内容,用于文本或二进制数据,即使在IE8 +
中也是如此