我的开发环境是 tomcat6 + jdk1.6 现在需要做个客户端  ajax + servlet .jpg格式文件上传到服务器jsp页面要求异步上传以下是我的jsp,但是此方法不能用
====================================
<script type="text/javascript">
var xmlHttp;
function createXmlHttp(){
if(window.ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}
} function upLoad(id){
document.getElementById("file"+id).select();
var fileName=document.selection.createRange().text
    var lens=fileName.length;
    if(lens==0){
     return;
    }
    var extname=fileName.substring(lens-4,lens);
    if(extname!=".jpg"&&extname!=".JPG"){
    alert("请选择jpg文件!");
    document.getElementById(id).innerHTML="<input id='file"+id+"' type='file' size='3' onchange='upLoad(\""+id+"\")'/>";
    return ;
}
var folds = document.getElementById("folds"+id).value;
xmlHttp=createXmlHttp();
xmlHttp.onreadystatechange=handlecallback;
var url="servlet/UpLoad?flag=13&fileName="+fileName+"&folds="+folds+"&id=1&area="+id;
xmlHttp.open('post',url,true);
xmlHttp.send(null);
}

function handlecallback(){
if(xmlHttp.readyState==4){
var data=xmlHttp.responseText;
var lens=data.length;
var id=data.substring(0,4);
document.getElementById(id).innerHTML = data.substring(4,lens);
}
}
</script><body >
<table width="100%%" border="0" cellpadding="5" cellspacing="1" bgcolor="#999999">
  <tr class="STYLE7">
    <td width="35" height="30" align="center" bgcolor="#CCCCCC" class="STYLE7">序号</td>
    <td width="380" height="30" align="center" bgcolor="#CCCCCC"  class="STYLE7">标题</td>
    <td width="120" height="30" align="center" bgcolor="#CCCCCC" class="STYLE7">缩略图</td>
  </tr>
  <tr>
    <td height="30" align="center" bgcolor="#eeeeee">1</td>
    <td height="30" bgcolor="#eeeeee"><input name="title2" type="text" size="32" /></td>
    <td height="30" bgcolor="#eeeeee"><span id="2"><input id="file2" type="file" size="3" onchange="upLoad('2')"/></span></td>
  </tr>
</table>
</body>以下是servlet
========================
String path=null;
try {
request.setCharacterEncoding("gb18030");//转换文件路径编码
pw = response.getWriter();//输出流
String uploadpath = this.getServletContext().getRealPath("upLoad");//服务器相对路径
File file = new File(request.getParameter("fileName"));//得到本地文件信息
DataInputStream in = new DataInputStream(new FileInputStream(file));//创建输入流


Long fileSize = file.length();//获得文件长度
byte[] buf = new byte[fileSize.intValue()];//缓存
in.read(buf);//读文件

String fileName = request.getParameter("area")+"-"+request.getParameter("folds")+"-"+request.getParameter("id");
//文件名类型 区-期数-位置

path = uploadpath + "\\" + fileName+".jpg";//定义文件格式
FileOutputStream out = new FileOutputStream(new File(path));//文件输出流
try {
out.write(buf);//输出
} catch (Exception e) {
e.printStackTrace();
}
out.close();//关闭输出流
in.close();//关闭输入流

} catch (Exception e) {
e.printStackTrace();
}
}
问题在于  File file = new File(request.getParameter("fileName"));//此句时从服务器上区找需要上传的文件,而事实是需要去客户端找,请各位高手帮忙解决,很急的!!

解决方案 »

  1.   

    jQuery有个文件上传的js插件,你可以看看,你刚用的方式是肯定获取不了的,客户端必须把流带过去才可以的
      

  2.   


    有代码吗?我没用过jQuery,一点都不清楚,只了解JS
      

  3.   

    Action 中定义ajax接受
    org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest f;
    private HttpServletRequest request;
    // -----保证获得的request对象是非空的------------
    public void setServletRequest(HttpServletRequest request) {
    this.request = request;
    }
    xml配置文件中定义拦截器
     <!-- 配置fileUpload的拦截器 -->
         <interceptor-ref name="fileUploadStack"></interceptor-ref> action中再注入文件变量,就能读到文件了,然后再自行保存就OK了。
      

  4.   

    问题是我现在不能用SUBMIT去提交form表单,没法获得file的全部信息
      

  5.   

    我现在有这样一个思路,就是在jsp页面上 用js来获取将要上传图片的内容信息,然后将这些信息写到服务器的servlet上,服务器再将这些信息保存到指定的地方,不知道在js上怎么获得file的内容信息,有高手能解决吗?
      

  6.   

    出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是不可能的。
    所以页面无刷新上传目前都是用 IFrame 实现的。
    具体可以在网上搜一下,很多的。