【Servlet】文件上传
用到的lib有:
commons-io-2.0.1.jarcommons-fileupload-1.2.2.jar
可以在Apache官网上下载,也可以在Struts2中找到,
首先是上传文件的页面:
请选择要上传的文件:<form action="UploadServlet" method="post" enctype="multipart/form-data">上传人:<input type="text" name="username"><br><input type="file" name="file"><br><input type="submit" value="上传"></form>
其中,enctype="multipart/form-data"必须有,否则会报错,
下面是UploadServlet:
public class UploadServlet extends HttpServlet {private ServletContext sc;private String savepath;public UploadServlet() { super(); }public void init(ServletConfig config) throws ServletException {savepath=config.getInitParameter("savepath");sc=config.getServletContext();super.init();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");DiskFileItemFactory factory=new DiskFileItemFactory();ServletFileUpload upload=new ServletFileUpload(factory);try {//解析request参数List<FileItem> items=(<FileItem>)upload.parseRequest(request);for(FileItem item : items)//判断是否为文本参数if(item.isFormField()){System.out.println("参数名:"+item.getFieldName()+",参数值:"+item.getString("UTF-8"));//对应的值加上编码,否则有可能乱码,}else{//为文件,//判断是否为空,if(item.getName()!=null&& !item.getName().equals("")){System.out.println("文件名:"+item.getName());System.out.println("文件类型:"+item.getContentType());System.out.println("文件大小:"+item.getSize());//通过item.getName()获得的文件名是带了客户端的路径的,所以这里截取出文件名,String value=item.getName();int start=value.lastIndexOf("\\");String fileName=value.substring(start+1);File file=new File(sc.getRealPath("/")+savepath,fileName);//保存文件item.write(file);request.getSession().setAttribute("uploadmessage", "文件上传成功!");System.out.println("文件上传成功!");}else {request.getSession().setAttribute("uploadmessage", "没有选择上传文件!");}}}}catch (Exception e) {e.printStackTrace();request.getSession().setAttribute("uploadmessage", "文件上传失败!");}response.sendRedirect("result.jsp");}}在web.xml中UploadServlet配置中加上初始化参数savepath:
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>org.yhn.test.servlet.UploadServlet</servlet-class> <init-param> <param-name>savepath</param-name> <param-value>upload</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping>
结果页面输出下session即可,
最后别忘了在项目中新建一个文件夹,upload,
效果如下:


