使用Servlet3.0如何实现一个上传文件功能
导读:本文共3006字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 一、使用Servlet3.0提供的API实现文件上传1.1、编写上传页面<%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTML><html><head><title>Servlet3.0实现文件上... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。一、使用Servlet3.0提供的API实现文件上传
1.1、编写上传页面
<%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTML><html><head><title>Servlet3.0实现文件上传</title></head><body><fieldset><legend>上传单个文件</legend><!--文件上传时必须要设置表单的enctype="multipart/form-data"--><formaction="${pageContext.request.contextPath}/UploadServlet"method="post"enctype="multipart/form-data">上传文件:<inputtype="file"name="file"><br><inputtype="submit"value="上传"></form></fieldset><hr/><fieldset><legend>上传多个文件</legend><!--文件上传时必须要设置表单的enctype="multipart/form-data"--><formaction="${pageContext.request.contextPath}/UploadServlet"method="post"enctype="multipart/form-data">上传文件:<inputtype="file"name="file1"><br>上传文件:<inputtype="file"name="file2"><br><inputtype="submit"value="上传"></form></fieldset></body></html>
1.2、开发处理文件上传的Servlet
1、使用注解@MultipartConfig将一个Servlet标识为支持文件上传。
2、Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
UploadServlet 代码如下:
packageme.gacl.web.controller;importjava.io.File;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.Collection;importjavax.servlet.ServletException;importjavax.servlet.annotation.MultipartConfig;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.Part;//使用@WebServlet配置UploadServlet的访问路径@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")//使用注解@MultipartConfig将一个Servlet标识为支持文件上传@MultipartConfig//标识Servlet支持文件上传publicclassUploadServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//存储路径StringsavePath=request.getServletContext().getRealPath("/WEB-INF/uploadFile");//获取上传的文件集合Collection<Part>parts=request.getParts();//上传单个文件if(parts.size()==1){//Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。//Partpart=parts[0];//从上传的文件集合中获取Part对象Partpart=request.getPart("file");//通过表单file控件(<inputtype="file"name="file">)的名字直接获取Part对象//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来//获取请求头,请求头的格式:form-data;name="file";filename="snmp4j--api.zip"Stringheader=part.getHeader("content-disposition");//获取文件名StringfileName=getFileName(header);//把文件写到指定路径part.write(savePath+File.separator+fileName);}else{//一次性上传多个文件for(Partpart:parts){//循环处理上传的文件//获取请求头,请求头的格式:form-data;name="file";filename="snmp4j--api.zip"Stringheader=part.getHeader("content-disposition");//获取文件名StringfileName=getFileName(header);//把文件写到指定路径part.write(savePath+File.separator+fileName);}}PrintWriterout=response.getWriter();out.println("上传成功");out.flush();out.close();}/***根据请求头解析出文件名*请求头的格式:火狐和google浏览器下:form-data;name="file";filename="snmp4j--api.zip"*IE浏览器下:form-data;name="file";filename="E:\snmp4j--api.zip"*@paramheader请求头*@return文件名*/publicStringgetFileName(Stringheader){/***String[]tempArr1=header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别*火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}*IE浏览器下:tempArr1={form-data,name="file",filename="E:\snmp4j--api.zip"}*/String[]tempArr1=header.split(";");/***火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}*IE浏览器下:tempArr2={filename,"E:\snmp4j--api.zip"}*/String[]tempArr2=tempArr1[2].split("=");//获取文件名,兼容各种浏览器的写法StringfileName=tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"","");returnfileName;}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
运行结果如下:
可以看到,使用Servlet3.0提供的API实现文件上传功能是非常方便的。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
使用Servlet3.0如何实现一个上传文件功能的详细内容,希望对您有所帮助,信息来源于网络。