如何使用JavaScript打开本地磁盘文件?

2020/11/01 01:42 · javascript ·  · 0评论

我试图用打开文件

window.open("file:///D:/Hello.txt");

浏览器不允许以这种方式打开本地文件,可能出于安全原因。我想在客户端使用文件的数据。如何在JavaScript中读取本地文件?

这是一个使用示例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/

浏览器兼容性

  • IE 10以上
  • Firefox 3.6以上版本
  • 铬13+
  • Safari 6.1+

http://caniuse.com/#feat=fileapi

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 - https://stackoverflow.com/questions/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>

尝试

function readFile(file) {
  return new Promise((resolve, reject) => {
    let fr = new FileReader();
    fr.onload = x=> resolve(fr.result);
    fr.readAsText(file);
})}

但是用户需要采取行动来选择文件

这里的其他人为此提供了相当详尽的代码。我不知道,那时可能需要更详细的代码。无论如何,我赞成其中之一,但这是一个非常简化的版本,其工作原理相同:

function openFile() {
  document.getElementById('inp').click();
}
function readFile(e) {
  var file = e.target.files[0];
  if (!file) return;
  var reader = new FileReader();
  reader.onload = function(e) {
    document.getElementById('contents').innerHTML = e.target.result;
  }
  reader.readAsText(file)
}
Click the button then choose a file to see its contents displayed below.
<button onclick="openFile()">Open a file</button>
<input id="inp" type='file' style="visibility:hidden;" onchange="readFile(event)" />
<pre id="contents"></pre>

考虑将文件重新格式化为javascript。然后,您可以使用良好的旧版本简单地加载它...

<script src="thefileIwantToLoad.js" defer></script>

xmlhttp请求方法对于本地磁盘上的文件无效,因为浏览器安全不允许这样做。但是我们可以通过在目标“ ...浏览器中创建快捷方式->右键单击->属性来覆盖浏览器安全性。 location path.exe“附加--allow-file-access-from-files。这已在chrome上进行了测试,但是请注意,应关闭所有浏览器窗口,并从通过此快捷方式打开的浏览器中运行代码。

你不能 诸如Firefox,Safari等新的浏览器会阻止“文件”协议。它仅适用于旧版浏览器。

您必须上传所需的文件。

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的内容。

本文地址:http://javascript.askforanswer.com/ruheshiyongjavascriptdakaibendicipanwenjian.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!