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(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。