我试图提供一个仅脚本的解决方案,用于通过浏览器读取客户端计算机上的文件内容。
我有一个适用于 Firefox 和 Internet Explorer 的解决方案。这并不漂亮,但我现在只是在尝试:
function getFileContents() {
var fileForUpload = document.forms[0].fileForUpload;
var fileName = fileForUpload.value;
if (fileForUpload.files) {
var fileContents = fileForUpload.files.item(0).getAsBinary();
document.forms[0].fileContents.innerHTML = fileContents;
} else {
// try the IE method
var fileContents = ieReadFile(fileName);
document.forms[0].fileContents.innerHTML = fileContents;
}
}
function ieReadFile(filename)
{
try
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(filename, 1);
var contents = fh.ReadAll();
fh.Close();
return contents;
}
catch (Exception)
{
return "Cannot open file :(";
}
}
我可以打电话getFileContents()
它会将内容写入fileContents
文本区域。
有没有办法在其他浏览器中执行此操作?
目前我最关心的是 Safari 和 Chrome,但我愿意接受任何其他浏览器的建议。
Edit:回答“你为什么要这样做?”的问题:
基本上,我想在客户端将文件内容与一次性密码一起哈希,以便我可以将此信息发送回作为验证。
编辑以添加有关文件 API 的信息
由于我最初写了这个答案,File API http://dev.w3.org/2006/webapi/FileAPI/已被提议作为标准在大多数浏览器中实现 http://caniuse.com/#feat=fileapi(从 IE 10 开始,增加了对FileReader
此处描述的 API,虽然还不是File
应用程序编程接口)。该API比旧的Mozilla API稍微复杂一些,因为它旨在支持异步读取文件,更好地支持二进制文件以及不同文本编码的解码。有Mozilla 开发者网络上提供了一些文档 https://developer.mozilla.org/en/using_files_from_web_applications以及网上的各种例子。您可以按如下方式使用它:
var file = document.getElementById("fileForUpload").files[0];
if (file) {
var reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = function (evt) {
document.getElementById("fileContents").innerHTML = evt.target.result;
}
reader.onerror = function (evt) {
document.getElementById("fileContents").innerHTML = "error reading file";
}
}
原答案
在 WebKit 中似乎没有办法做到这一点(因此,Safari 和 Chrome)。唯一的按键File http://trac.webkit.org/export/42566/trunk/WebCore/html/File.idl对象有fileName
and fileSize
。根据提交消息 http://trac.webkit.org/changeset/34702对于文件和文件列表支持,这些的灵感来自Mozilla 的文件对象 https://developer.mozilla.org/en/nsIDOMFile,但它们似乎只支持一部分功能。
如果您想改变这一点,您可以随时发送补丁 http://webkit.org/coding/contributing.html到 WebKit 项目。另一种可能性是提议将 Mozilla API 纳入HTML 5 http://www.whatwg.org/specs/web-apps/current-work/; the WHATWG http://lists.whatwg.org/listinfo.cgi/whatwg-whatwg.org邮件列表可能是最好的地方。如果你这样做,那么至少在几年的时间内,更有可能有一种跨浏览器的方式来做到这一点。当然,提交补丁或纳入 HTML 5 的提案确实意味着需要做一些捍卫这一想法的工作,但 Firefox 已经实现了它,这一事实为您提供了一些开始的机会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)