java文件上传Demo(必看篇)
说到文件上传我们要做到:
1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar
2.将form改为上传文件模式:enctype="multipart/form-data"
3.开始编写相关代码
这里会用到几个关键的类:磁盘文件工厂DiskFileItemFactory;创建servlet文件上传类:ServletFileUpload
还有几个重要的方法:DiskFileItemFactory类用于将以临时文件形式保存在磁盘上的存放目录的方法setRepository;
ServletFileUpload类得到表单中所有的数据,得到form表单中所有的元素方法:parseRequest
下面看具体代码:
说明以这种方式上传文件是保存在服务器端的!
importjava.io.File;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.UUID;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileUploadException;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.apache.commons.io.FileUtils;
publicclassUploadServletextendsHttpServlet{
/**
*Constructoroftheobject.
*/
publicUploadServlet(){
super();
}
/**
*Destructionoftheservlet.
*/
publicvoiddestroy(){
super.destroy();//Justputs"destroy"stringinlog
//Putyourcodehere
}
/**
*ThedoGetmethodoftheservlet.
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
*
*@paramrequesttherequestsendbytheclienttotheserver
*@paramresponsetheresponsesendbytheservertotheclient
*@throwsServletExceptionifanerroroccurred
*@throwsIOExceptionifanerroroccurred
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
this.doPost(request,response);
}
/**
*ThedoPostmethodoftheservlet.
*
*Thismethodiscalledwhenaformhasitstagvaluemethodequalstopost.
*
*@paramrequesttherequestsendbytheclienttotheserver
*@paramresponsetheresponsesendbytheservertotheclient
*@throwsServletExceptionifanerroroccurred
*@throwsIOExceptionifanerroroccurred
*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
DiskFileItemFactorysf=newDiskFileItemFactory();//实例化磁盘被文件列表工厂
Stringpath=request.getRealPath("/upload");//得到上传文件的存放目录
sf.setRepository(newFile(path));//设置文件存放目录
sf.setSizeThreshold(1024*1024);//设置文件上传小于1M放在内存中
Stringrename="";//文件新生成的文件名
StringfileName="";//文件原名称
Stringname="";//普通field字段
//从工厂得到servletupload文件上传类
ServletFileUploadsfu=newServletFileUpload(sf);
try{
Listlst=sfu.parseRequest(request);//得到request中所有的元素
for(FileItemfileItem:lst){
if(fileItem.isFormField()){
if("name".equals(fileItem.getFieldName())){
name=fileItem.getString("UTF-8");
}
}else{
//获得文件名称
fileName=fileItem.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
Stringhouzhui=fileName.substring(fileName.lastIndexOf("."));
rename=UUID.randomUUID()+houzhui;
fileItem.write(newFile(path,rename));
}
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("普通字段"+name);
System.out.println("文件名称"+fileName);
System.out.println("修改后生成的文件名称"+rename);
response.sendRedirect("ok.jsp");
out.flush();
out.close();
}
/**
*Initializationoftheservlet.
*
*@throwsServletExceptionifanerroroccurs
*/
publicvoidinit()throwsServletException{
//Putyourcodehere
}
}
index.jsp页面:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>文件测试界面 名称:
图片:
ok.jsp页面:
上传文件成功!
实现效果就不截图了,有需要自己那过去用!
以上这篇java文件上传Demo(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。