servlet3文件上传操作
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了。
一、使用Servlet3.0提供的API实现文件上传
1.1、编写上传页面
<%@pagelanguage="java"pageEncoding="UTF-8"%>Servlet3.0实现文件上传
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");
//获取上传的文件集合
Collectionparts=request.getParts();
//上传单个文件
if(parts.size()==1){
//Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
//Partpart=parts[0];//从上传的文件集合中获取Part对象
Partpart=request.getPart("file");//通过表单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实现文件上传功能是非常方便的。
总结
以上所述是小编给大家介绍的servlet3文件上传操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!