更新:大部分浏览器的最新版本都支持通过 FileReader 来打开本地文件,具体方法见这里。
为着安全起见,在 JavaScript 中是不允许直接访问本地文件的。但有时候又需要打开和保存本地文件,在目前的情况之下就只能用一些特殊的方法来实现了。最麻烦的是,这些方法大多都不能适 用于各个主要浏览器,很费事但也只能如此。这一篇总结一下各种打开本地文件的方法,下一篇总结保存本地文件的方法。
首先是 IE 浏览器。IE 有自己独有的 ActiveX,实现文件的是容易的。在下面的例子中,首先选择好要打开的文件路径名,点击"Read"按钮后将把该文件的内容读入 textarea 区域:
<html>
<body>
<input type="file" id="fileid">
<button onclick="doRead()">Read</button>
<textarea id="areaid">hello this!</textarea>
<script type="text/javascript">
// works in ie 6
var myfile = document.getElementById("fileid");
var myarea = document.getElementById("areaid");
/* myfile.click(); */
function doRead() {
var filename = myfile.value;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tempfile = fso.OpenTextFile(filename, 1);
var data = tempfile.ReadAll();
myarea.value = data;
tempfile.Close();
}
</script>
</body>
</html>
注意其中IE将弹出警告窗口要求你确认。
接下来我们来看在 Firefox 中有什么方法可以实现文件的读取。Firefox 自己扩展了文件选择按钮的功能,因此用下面的代码可以实现本地文件的打开:
<html>
<body>
<input type="file" id="fileid">
<button onclick="doRead()">Read</button>
<textarea id="areaid">hello this!</textarea>
<script type="text/javascript">
// works in firefox 3
var myfile = document.getElementById("fileid");
var myarea = document.getElementById("areaid");
/* myfile.click(); // works in firefox 4 and beyond */
function doRead() {
var tempfile = myfile.files[0];
var data = tempfile.getAsText("utf8");
myarea.value = data;
}
</script>
</body>
</html>
看起来比IE情形要简单一些,不过上面这些函数在 Firefox 中已经标记为废弃的,在以后可能会被去掉。如果只是在本地网页中读取本地文件,在 Firefox 中还可以用[5]中的方法。
参考资料:
[1] MSDN - OpenTextFile Method
[2] File - MDC Docs
[3] FileReader - MDC Docs
[4] Using files from web applications - MDC Docs
[5] File I/O - MDC Docs
[6] HTML5中File对象初探 | JS Mix
[YAML] Date: 2011-05-26 18:00:52, Update: 2012-05-27 12:30:00