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 相关文章推荐
一行代码实现纯数据json对象的深度克隆实现思路
Jan 09 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
input:checkbox多选框实现单选效果跟radio一样
Jun 16 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
Angularjs 事件指令详细整理
Jul 27 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
Jan 20 Javascript
vue项目中使用vue-layer弹框插件的方法
Mar 11 Javascript
javascript实现评分功能
Jun 24 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 Javascript
React实现阿里云OSS上传文件的示例
Aug 10 Javascript
js实现详情页放大镜效果
Oct 28 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
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python里对list中的整数求平均并排序
2014/09/12 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
工程班组长岗位职责
2013/12/30 职场文书
士力架广告词
2014/03/20 职场文书
初中生期末评语大全
2014/04/24 职场文书
企业安全标语
2014/06/07 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
Golang map映射的用法
2022/04/22 Golang