Answers:
这是一个使用示例FileReader
:
function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
displayContents(contents);
};
reader.readAsText(file);
}
function displayContents(contents) {
var element = document.getElementById('file-content');
element.textContent = contents;
}
document.getElementById('file-input')
.addEventListener('change', readSingleFile, false);
<input type="file" id="file-input" />
<h3>Contents of the file:</h3>
<pre id="file-content"></pre>
http://dev.w3.org/2006/webapi/FileAPI/
null
每个onClick
事件应该可以解决问题,请参阅:stackoverflow.com/a/12102992/63011
FileReader
,但对displayContents
上述innerHTML
内容进行了评论:请注意,使用不受信任的内容进行此类设置可能是一个安全漏洞。(要亲自查看,请创建一个bad.txt
类似以下内容的文件,<img src="/nonexistent" onerror="alert(1);">
并查看警报是否已执行-它可能是更恶意的代码。)
innerHTML
用textContent
。谢谢你的评论。
DOMContentLoaded
事件。
在HTML5的FileReader设施确实允许您处理本地文件,但这些必须由用户来选择,你不能去生根关于用户硬盘寻找文件。
我目前将此用于Chrome(6.x)的开发版本。我不知道其他浏览器支持什么。
因为我没有生命,所以我希望获得这4个信誉点,因此我可以向真正擅长编码的人表示爱意(支持答案),我分享了我对Paolo Moretti的编码的改编。只需使用openFile(
将文件内容作为第一个参数执行的功能即可)
。
function dispFile(contents) {
document.getElementById('contents').innerHTML=contents
}
function clickElem(elem) {
// Thx user1601638 on Stack Overflow (6/6/2018 - /programming/13405129/javascript-create-and-save-file )
var eventMouse = document.createEvent("MouseEvents")
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
elem.dispatchEvent(eventMouse)
}
function openFile(func) {
readFile = function(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
fileInput.func(contents)
document.body.removeChild(fileInput)
}
reader.readAsText(file)
}
fileInput = document.createElement("input")
fileInput.type='file'
fileInput.style.display='none'
fileInput.onchange=readFile
fileInput.func=func
document.body.appendChild(fileInput)
clickElem(fileInput)
}
Click the button then choose a file to see its contents displayed below.
<button onclick="openFile(dispFile)">Open a file</button>
<pre id="contents"></pre>
clickElem()
,您可以直接调用而不是其中包含的代码fileInput.click()
。(至少在最新版本的Chrome中)
尝试
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
但是用户需要采取行动来选择文件
Javascript通常无法在新的浏览器中访问本地文件,但XMLHttpRequest对象可用于读取文件。因此,实际上是Ajax(而不是Javascript)正在读取文件。
如果要读取文件abc.txt
,可以将代码编写为:
var txt = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
txt = xmlhttp.responseText;
}
};
xmlhttp.open("GET","abc.txt",true);
xmlhttp.send();
现在txt
包含文件abc.txt的内容。