jsp无刷新文件上传的实现
本想利用ajax(动态网站静态化)实现无刷新文件上传,后来发现不易实现,在网上找了很久,终于找到一个“伪ajax(动态网站静态化)”的实现方式,现在发出来我实际的代码,一飨读者。
首先我们需要一个上传的html或者(sun企业级应用的首选)文件,如下:
<form method="post" action="../servlet/fileuploadservlet" enctype="multipart/form-data" target="hidden_frame" onsubmit="showmsg();" style="margin:0;padding:0">
<input type="file" name="sfile" style="width:450">
<input type="hidden" name="act" value="upload">
<input type="submit" value="上传文件"><span id="msg"></span>
<br>
<font color="red">支持jpg,jpeg,gif,bmp,swf,rmvb,rm,avi文件的上传</font>
<iframe name=hidden_frame id="hidden_frame" style=display:none></iframe>
</form>
其中form的target属性非常重要,把form的action提交到一个隐藏的iframe中去执行,然后返回的时候在msg的地方填入操作即可,servlet的类似代码如下:
public void dopost(httpservletrequest request, httpservletresponse response)
throws ioexception, servletexception{
printwriter out = response.getwriter();
response.setcharacterencoding("utf-8");
response.setheader("charset","utf-8");
response.setheader("cache-control", "no-cache");
string filepath="",msg="",ext="";
smartupload su = new smartupload();
boolean succ=true;
。。。。。。
try{
su.initialize(getservletconfig(),request,response);
su.setmaxfilesize(102400000);
su.settotalmaxfilesize(102400000);
su.setallowedfileslist(mediaext+","+flashext+","+imgext);
su.setdeniedfileslist("exe,bat,,");
su.upload();
for (int i=0;i<su.getfiles().getcount();i++)
{
com.jsp(sun企业级应用的首选)smart.upload.file file = su.getfiles().getfile(i);
if (file.ismissing()) continue;
string filename=uploadfileutils.returnrandomfilename(file.getfileext());
ext=file.getfileext().tolowercase();
。。。。。。。。。。。
msg="<a href="#">上传成功!</a>";
}
}catch(smartuploadexception sue){
succ=false;
msg="<font color=red>上传失败:请检查文件扩展名或文件大小!</font>";
}catch(exception ex){
succ=false;
msg="<font color=red>上传失败:请检查文件扩展名或文件大小!</font>";
ex.printstacktrace();
}
msg=escape.escape(msg);
if(succ)
out.println("parent.document.getelementbyid(msg).innerhtml = unescape("+msg+");parent.backcalliframe("+escape.escape(ext)+","+escape.escape(filepath)+")");
else
out.println("parent.document.getelementbyid(msg).innerhtml = unescape("+msg+");");
out.close();
}