struts2 JS获取上传文件的绝对路径,兼容IE和FF

因为file控件上传失败后会自动清空,所以使用文本框来保存上传路径,而且在不同的浏览器下,控件的样式也需要兼容。下面是自己用到的实例

// 初始化判断浏览器的版本,根据版本的不同使用不同的样式function getExplorer() {
     //IE
     if (navigator.userAgent.indexOf("MSIE")>=0)
     {
       document.getElementById("1").style.display = "block";
       document.getElementById("2").style.display = "none";
       document.getElementById("FileUpload").className = "file";
       document.getElementById("box").className = "file-box";
     }
     //Firefox
     else if (navigator.userAgent.indexOf("Firefox")>=0)
     {
       document.getElementById("1").style.display = "none";
       document.getElementById("2").style.display = "block";
       document.forms[0].elements["propertyName"].style.width="625px";
     }
     //Chrome
     else if(navigator.userAgent.indexOf("Chrome") >=0)
     {
       document.getElementById("1").style.display = "block";
       document.getElementById("2").style.display = "none";
       document.forms[0].elements["propertyName"].style.width="495px";
       document.getElementById("ieBtn").style.display = "none";
       document.getElementById("FileUpload").style.width = "93px";
      }
      //Safari
      else if(navigator.userAgent.indexOf("Safari") >=0 )
      {
       document.getElementById("1").style.display = "block";
       document.getElementById("2").style.display = "none";
       document.forms[0].elements["propertyName"].style.width="585px";
       document.getElementById("ieBtn").style.display = "none";
       document.getElementById("FileUpload").style.width = "90px";
      }
}

样式的代码

.file-box{ position:relative;width:55px}
.btn{ width:55px;}
.file{ position:absolute;top:0; right:0px; height:24px; filter:alpha(opacity:0);opacity: 0;width:0px } 

html的代码

由于使用的是struts2

控件的name是formInfo.propertyName

修改的场合时,控件的value是前面的action通过request.setAttribute("Form", pForm)设置的,jsp接收时必须按照下面那么写

<table align="center">
<tr>
<td ><s:textfield name="formInfo.propertyName"  value="%{#request.Form.propertyName}"  size="512" maxlength="512" style="width:620px;" readonly="true" /></td>
<td id="1">
<div id="box">
    <input type="button" value="参照" class="btn" id="ieBtn" />
    <input type="file"name="filepropertyName" id="FileUpload" size="1" onchange="Change()" />
</div>
</td>
<td id="2"><input type="button" name="upload" class="btn" id="upload" value="参照" onclick="selectPDF()"/></td>
<td ><input type="button" value="クリア" class="btn" onclick="delPdf()"/></td>
</tr>
</table>

单击按钮把路径显示到文本框中的js

// 当file的值改变时 把路径赋值给文本框
function Change() {
  //IE
    if (navigator.userAgent.indexOf("MSIE")!=-1||navigator.userAgent.indexOf("Chrome") !=-1||navigator.userAgent.indexOf("Safari") !=-1)
     {
       var localpath = document.getElementById("FileUpload").value;
       document.forms[0].elements["propertyName"].value = localpath;
     }
     //FF
     else  if (navigator.userAgent.indexOf("Firefox")!=-1)
     {
          readFileFirefox()
     }
 } 

 //FF
function readFileFirefox() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    }
    catch (e) {
        return;
    } 

    var fileName=document.getElementById("FileUpload").value;
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    try {
        file.initWithPath( fileName.replace(/\//g, "\\\\") );
    }
    catch(e) {
        if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH) throw e;
        return;
    } 

    if ( file.exists() == false ) {
        alert("File ‘" + fileName + "‘ not found.");
        return;
    }
    document.forms[0].elements["propertyName"].value =file.path; } 

// 火狐浏览器下 单击按钮打开file控件 弹出文件选中对话框 function selectPDF(){ document.forms[0].FileUpload.click(); }
时间: 2024-11-05 19:37:16

struts2 JS获取上传文件的绝对路径,兼容IE和FF的相关文章

js获取上传文件的绝对路径

在html中    <input type="file" id="importFile" />    <input type="button" onclick="upload()"/> <script>function upload() {    var filename = document.getElementById("importFile").value;    

Atitit.js获取上传文件全路径

1. 默认的value只能获取文件名..安全原因.. 1 2. Firefox浏览器的读取 1 3. Html5 的file api 2 4. 解决方法::使用applet插件 2 5. 参考 3 1. 默认的value只能获取文件名..安全原因.. js是无法获取file 控件的值的,你要获取的话可以通过后台程序语言用json或者xml之类的格式来返回被上传的文件路径. file是一种特殊的input,不能被赋值,也不能被javascript取值,只能随表单提交,而且随表单提交的也是file路

JS 获取上传文件的内容

<div> 上传文件 : <input type="file" name = "file" id = "fileId" /> <button type = "submit" name = "btn" value = "提交" id = "btnId" onclick="check()" /> 提交 </di

js获取上传文件内容,ajax提交

<from action="" enctype="multipart/form-data" method="post"> <a> <span>修改头像</span> <input type="file" id="fileUp" accept="image/png,image/jpeg"> </a></from&

js获取上传文件后缀名(附js提交form表单)

代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script> function check_file()  {   var strFileName=form1.FileName.value;   if (strFileName=="")   {     alert(&

js获取上传文件的大小和名称

代码如下: 上传:<input type="file" style="width: 500px;" onchange="fileChange(this);"/> <script type="text/javascript"> function fileChange(target){ var isIE = /msie/i.test(navigator.userAgent) && !wind

js获取上传文件信息并及时查看

<form id="picForm" name="picForm"  method="post" enctype="multipart/form-data"> <input type="file" id="photosfile" name="files" /> <button class="btn">请选择上传图

js获取上传文件个数 以及名称

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <input type="file" name="file" id="file" multiple=&q

怎么通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端?

今天在论坛上看到这样一个问题,有必要编辑搜集下. 问题描述:怎么通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端 题主用jquery接收 <input name="c_pic" id="c_pic" type="file" class="file"> 用的方法是: var input = document.getElementById("c_pic"); inpu