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 相关文章推荐
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
Jul 28 Javascript
深入了解JavaScript 私有化
May 30 Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 Javascript
一起写一个即插即用的Vue Loading插件实现
Oct 31 Javascript
vue项目中极验验证的使用代码示例
Dec 03 Javascript
详解elementUI中input框无法输入的问题
Apr 27 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 使用array函数实现分页
2015/02/13 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
javascript 继承实现方法
2009/08/26 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python的装饰器使用详解
2017/06/26 Python
django 多数据库配置教程
2018/05/30 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
基层党支部公开承诺书
2014/05/29 职场文书
影子教师研修方案
2014/06/14 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
教师考核评语大全
2014/12/31 职场文书
2016年情人节广告语
2016/01/28 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server