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 相关文章推荐
复选框全选与全不选操作实现思路
Aug 18 Javascript
JavaScript的继承的封装介绍
Oct 15 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
jQuery实现验证码功能
Mar 17 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
Vue中引入样式文件的方法
Aug 18 Javascript
es6系列教程_ Map详解以及常用api介绍
Sep 25 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
Nov 20 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
vue $set 给数据赋值的实例
Nov 09 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与Java进行通信的实现方法
2013/10/21 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
浅析return false的正确使用
2013/11/04 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
深入理解Python3中的http.client模块
2017/03/29 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python 错误处理 assert详解
2020/04/20 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python中upper是做什么用的
2020/07/20 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
旅游文化节策划方案
2014/06/06 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
节水宣传标语口号
2015/12/26 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers