JS获取input file绝对路径的方法(推荐)


Posted in Javascript onAugust 02, 2016

最近因需要上传文件到oracle blob里, 在获取文件路径的遇到些问题,由于安全原因,新版的浏览器都不支持直接获取本地URL,在网上找了些方法,如下:

<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>
<div id="text" style="color:#f00;"></div>
<input type="file" id="file" onchange="getvl(this)" />

以上代码在IE 6 7 8均正常使用,在IE9下,document.selection.createRange()拒绝访问,看来安全性有所提高。

最后测试发现,在IE9下,如果file控件获得焦点,则document.selection.createRange()拒绝访问,

因此,只需要在obj.select()后面加一句obj.blur()即可。

EX:

else if(Sys.ie>="7.0"){
  //ie7,ie8
  obj.select();
  obj.blur();
  file_url = document.selection.createRange().text;
 }


// obj = document.getElementById("file");

以上这篇JS获取input file绝对路径的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
五个jQuery图片画廊插件 推荐
May 12 Javascript
js查错流程归纳
May 04 Javascript
jquery入门—选择器实现隔行变色实例代码
Jan 04 Javascript
js实现全国省份城市级联下拉菜单效果代码
Sep 07 Javascript
分享Javascript实用方法二
Dec 13 Javascript
如何在 Vue.js 中使用第三方js库
Apr 25 Javascript
Vue如何从1.0迁移到2.0
Oct 19 Javascript
JS中判断字符串存在和非空的方法
Sep 12 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 Javascript
JS动态图片的实现方法完整示例
Jan 13 Javascript
JavaScript实现复制文章自动添加版权
Aug 02 #Javascript
js获取上传文件的绝对路径实现方法
Aug 02 #Javascript
AngularJS基础 ng-list 指令详解及示例代码
Aug 02 #Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
Aug 02 #Javascript
jQuery实现的placeholder效果完整实例
Aug 02 #Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 #Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 #Javascript
You might like
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
会自动逐行上升的文本框
2006/06/30 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
js动态生成表格(节点操作)
2021/01/12 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
详细介绍Python语言中的按位运算符
2013/11/26 Python
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python入门篇之正则表达式
2014/10/20 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
基于Python绘制个人足迹地图
2020/06/01 Python
Python类成员继承重写的实现
2020/09/16 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
军训鉴定表自我鉴定
2014/02/13 职场文书
委托证明书
2014/09/17 职场文书
银行转正自我鉴定
2014/09/29 职场文书
三方合作意向书范本
2015/05/09 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
详解python字符串驻留技术
2021/05/21 Python