志在指尖
用双手敲打未来

jsp文件的上传功能怎么实现

jsp文件的上传功能怎么实现

一、预备部分
需要fileupload.jar与io.jar包共同完成。构建完成途径后可继续。
资源地址
二、页面部分
学号:
姓名:
上传照片:
注意:
1.文件上传有必要要使用post,以避免用get办法时传输总量超越搜索框所能承载最大字符数。
2.有必要参加enctype=”multipart.form-data”字段
3.文件处需用“file”jsp
三、Servlet部分
packagewebtest;
importjava.io.File;
importjava.io.IOException;
importjava.util.Iterator;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileItemFactory;
importorg.apache.commons.fileupload.FileUploadBase;
importorg.apache.commons.fileupload.FileUploadException;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*ServletimplementationclassUploadServlet
*/
@WebServlet(“/UploadServlet”)
publicclassUploadServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding(“utf-8”);//恳求编码处理,传输时
response.setCharacterEncoding(“utf-8”);//呼应编码处理,传输时
response.setContentType(“utf-8”);//呼应编码处理,显现时
booleanisMultipart=ServletFileUpload.isMultipartContent(request);//判别是否有entype=”multipart/form-data”部分
if(isMultipart){
try{
FileItemFactoryfactory=newDiskFileItemFactory();
ServletFileUploadupload=newServletFileUpload(factory);
//设置上传时的内存缓冲区巨细,超出时写入临时文件10kb
((DiskFileItemFactory)factory).setSizeThreshold(10240);//单位byte
//设置临时文件目录,避免系统空间缺乏
((DiskFileItemFactory)factory).setRepository(newFile(request.getSession().getServletContext().getRealPath(“Uploadtemp”)));//动态获取Uploadtemp文件夹坐落该项目中的位置
//控制上传单个文件的最大值20kb
upload.setSizeMax(20480);//单位byte
Listitems=upload.parseRequest(request);//解析form中的所有恳求字段,并保存在item中
Iteratoriter=items.iterator();
while(iter.hasNext()){
//解析时无顺序,因此需根据姓名查找
FileItemitem=iter.next();
if(item.isFormField()){//非文件数据
StringitemName=item.getFieldName();//获取非文件的规模数据名
if(itemName.equals(“sno”)){
intsno=-1;
sno=Integer.parseInt(item.getString(“utf-8”));
}
elseif(itemName.equals(“sname”)){
Stringsname=null;
sname=item.getString(“utf-8”);
}
else{
System.out.println(“其他字段…”);
}
}else{//文件上传
StringfileName=item.getName();//获取文件规模数据。途径及其名称
//判别文件类型
Stringext=fileName.substring(fileName.indexOf(“.”)+1);
if(!(ext.equals(“png”)||ext.equals(“gif”)||ext.equals(“jpg”))){
System.out.println(“仅支持png.gif,jpg类型文件”);
return;
}
Stringpath=request.getSession().getServletContext().getRealPath(“Upload”);//动态获取Upload文件夹坐落该项目中的位置
Filefile=newFile(path,fileName);
item.write(file);//定义上传途径,多为服务器途径
System.out.println(fileName+”上传成功”);
}
item.delete();//删除临时目录的文件
}
}
catch(FileUploadBase.SizeLimitExceededExceptione){
System.out.println(“最大20KB”);
}
catch(FileUploadExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
/**
*@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponse
*response)
*/
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//TODOAuto-generatedmethodstub
doGet(request,response);
}
}
注:
1.若该处标红且鼠标悬停后未找到包,则能够使用”alt”+”/”组合键挑选下图第一个类来导入。
2.由于若Upload与Uploadtemp文件存放于tomcat对应的项目下,每一次通过eclipse更新代码,会将eclipse下代码直接覆盖,因此两个文件夹会直接被覆盖掉。能够在eclipse中新建,或通过肯定/相对途径于其他文件夹中来设置。
3.临时文件中的数据会保留很短的时间,添加sleep让程序休眠或许能够看到。即使无item.delete(),在整个会话完成后,临时文件也会被删除。
4.若报错无法找到文件,请尝试用浏览器若谷歌进行操作,而不是用Eclipse自带的。

未经允许不得转载:IT技术网站 » jsp文件的上传功能怎么实现
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载