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 相关文章推荐
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
JS实现图片翻书效果示例代码
Sep 09 Javascript
javascript定时器完整实例
Feb 10 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
详解基于vue-cli优化的webpack配置
Nov 06 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 Javascript
vue2.x 对象劫持的原理实现
Apr 19 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 Javascript
js实现限定区域范围拖拉拽效果
Nov 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
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python subprocess模块详细解读
2018/01/29 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
Python Subprocess模块原理及实例
2019/08/26 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
获奖的大学生创业计划书
2014/01/05 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
企业安全生产规章制度
2015/08/06 职场文书
2016年母亲节寄语
2015/12/04 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript