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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
jQuery的ready方法详解
Nov 27 Javascript
js中键盘事件实例简析
Jan 10 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
AngularJS基础 ng-csp 指令详解
Aug 01 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
vuejs实现递归树型菜单组件
Jan 13 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
vue里input根据value改变背景色的实例
Sep 29 Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
js正则匹配多个全部数据问题
Dec 20 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
Python3解释器知识点总结
2019/02/19 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
综合素质的自我鉴定
2013/10/07 职场文书
大学自主招生推荐信
2014/05/10 职场文书
室内设计专业自荐信
2014/05/31 职场文书
政风行风评议心得体会
2014/10/21 职场文书
邹越演讲观后感
2015/06/15 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书