我的开发环境是 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"));//此句时从服务器上区找需要上传的文件,而事实是需要去客户端找,请各位高手帮忙解决,很急的!!
====================================
<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"));//此句时从服务器上区找需要上传的文件,而事实是需要去客户端找,请各位高手帮忙解决,很急的!!
有代码吗?我没用过jQuery,一点都不清楚,只了解JS
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了。
所以页面无刷新上传目前都是用 IFrame 实现的。
具体可以在网上搜一下,很多的。