使用Servlet3.0如何实现一个上传文件功能(servlet,servlet3.0,编程语言)

时间:2024-05-02 08:21:22 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

一、使用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如何实现一个上传文件功能

可以看到,使用Servlet3.0提供的API实现文件上传功能是非常方便的。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:使用Servlet3.0如何实现一个上传文件功能的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何在Java中正确的使用注解下一篇:

1 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18