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 相关文章推荐
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
用js写了一个类似php的print_r输出换行功能
Feb 18 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
node.js中的http.request.end方法使用说明
Dec 10 Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
vue解决跨域路由冲突问题思路解析
Nov 03 Javascript
vue中引用swiper轮播插件的教程详解
Aug 16 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 fsockopen伪造post与get方法的详解
2013/06/14 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
htm调用JS代码
2007/03/15 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
讲解Python中的标识运算符
2015/05/14 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python反射的用法实例分析
2018/02/11 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
Django缓存系统实现过程解析
2019/08/02 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
致100米运动员广播稿
2014/02/14 职场文书
幼儿园新年寄语
2014/04/03 职场文书
股权转让协议书
2014/04/12 职场文书
社会实践活动总结报告
2014/04/29 职场文书
2014年党支部学习材料
2014/05/19 职场文书
个人求职自荐信范文
2014/06/20 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2015员工年度考核评语
2015/03/25 职场文书
工程催款通知书
2015/04/17 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书