代码如下:读取本地文件<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>document</title></head><body> <p> <input type="file" id="files" style="display: none" onchange="fileimport();"> <input type="button" id="fileimport" value="导入"> </p> <script src="../js/jquery/jquery-1.11.1.js"></script> <script> //点击导入按钮,使files触发点击事件,然后完成读取文件的操作 $(#fileimport).click(function () { $(#files).click(); }) function fileimport() { //获取读取我文件的file对象 var selectedfile = document.getelementbyid('files').files[0]; var name = selectedfile.name;//读取选中文件的文件名 var size = selectedfile.size;//读取选中文件的大小 console.log(文件名:+name+大小:+size); var reader = new filereader();//这是核心,读取操作就是由它完成. //reader.readastext(selectedfile);//读取文件的内容,也可以读取文件的url reader.onload = function () { //当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可 console.log(this.result); } } </script></body></html>
写入文件html5中与filereader相对应的也有一个filewriter,filereader可以被chrome、ff和safari都支持。要求一定版本以上的。 但是filewriter似乎只有被chrome支持.
代码如下://首先导入一个js文件<script type="text/javascript" src="./js/filesaver.js" charset="utf-8"></script>//html中添加一个导出元素<input type="button" id="export" value="导出"/>//js文件$(#export).click(function(){ var content = 这是直接使用html5进行导出的; var blob = new blob([content], {type: text/plain;charset=utf-8}); saveas(blob, file.txt);//saveas(blob,filename) });
读取本地文件路径代码在获取文件路径的遇到些问题,由于安全原因,新版的浏览器都不支持直接获取本地url,在网上找了些方法,如下:
<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>document</title></head><body><script type="text/javascript"> //fx获取文件路径方法 function readfilefirefox(filebrowser) { try { netscape.security.privilegemanager.enableprivilege(universalxpconnect); } catch (e) { alert('无法访问本地文件,由于浏览器安全设置。为了克服这一点,请按照下列步骤操作:(1)在地址栏输入about:config;(2) 右键点击并选择 new->boolean; (3) 输入signed.applets.codebase_principal_support (不含引号)作为一个新的首选项的名称;(4) 点击ok并试着重新加载文件'); return; } var filename=filebrowser.value; //这一步就能得到客户端完整路径。下面的是否判断的太复杂,还有下面得到ie的也很复杂。 var file = components.classes[@mozilla.org/file/local;1] .createinstance(components.interfaces.nsilocalfile); try { // back slashes for windows file.initwithpath( filename.replace(/\//g, \\\\) ); } catch(e) { if (e.result!=components.results.ns_error_file_unrecognized_path) throw e; alert(file ' + filename + ' cannot be loaded: relative paths are not allowed. please provide an absolute path to this file.); return; } if ( file.exists() == false ) { alert(file ' + filename + ' not found.); return; } return file.path; } //根据不同浏览器获取路径 function getvl(obj){//判断浏览器 var sys = {}; var ua = navigator.useragent.tolowercase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1] : 0; var file_url=; if(sys.ie<="6.0"){ //ie5.5,ie6.0 file_url = obj.value; }else if(sys.ie>=7.0){ //ie7,ie8 obj.select(); file_url = document.selection.createrange().text; }else if(sys.firefox){ //fx //file_url = document.getelementbyid(file).files[0].getasdataurl();//获取的路径为ff识别的加密字符串 file_url = readfilefirefox(obj); }else if(sys.chrome){ file_url = obj.value; } //alert(file_url); document.getelementbyid(text).innerhtml=获取文件域完整路径为:+file_url; }</script><h1>js获取文件域完整路径的方法,兼容不同浏览器</h1><p id="text" style="color:#f00;"></p><input type="file" id="file" onchange="getvl(this)" /></body></html>
以上代码在ie 6 7 8均正常使用,在ie9下,document.selection.createrange()拒绝访问,看来安全性有所提高。
最后测试发现,在ie9下,如果file控件获得焦点,则document.selection.createrange()拒绝访问,
因此,只需要在obj.select()后面加一句obj.blur()即可。
else if(sys.ie>=7.0){ //ie7,ie8 obj.select(); obj.blur(); file_url = document.selection.createrange().text; } // obj = document.getelementbyid(file);
以上就是h5+js实现本地文件读取和写入的详细内容。
