栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

servlet3文件上传操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

servlet3文件上传操作

在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了。

一、使用Servlet3.0提供的API实现文件上传

1.1、编写上传页面

<%@ page language="java" pageEncoding="UTF-8"%>
 
 
  
   Servlet3.0实现文件上传
    
  
     
上传单个文件

上传多个文件

1.2、开发处理文件上传的Servlet

  1、使用注解@MultipartConfig将一个Servlet标识为支持文件上传。

  2、Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。

  UploadServlet 代码如下: 

 package me.gacl.web.controller;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Collection; 
 import javax.servlet.ServletException;
 import javax.servlet.annotation.MultipartConfig;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.Part;
 //使用@WebServlet配置UploadServlet的访问路径
 @WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
 //使用注解@MultipartConfig将一个Servlet标识为支持文件上传
 @MultipartConfig//标识Servlet支持文件上传
 public class UploadServlet extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//存储路径
String savePath = request.getServletContext().getRealPath("/WEB-INF/uploadFile");
//获取上传的文件集合
Collection parts = request.getParts();
//上传单个文件
if (parts.size()==1) {
  //Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
  //Part part = parts[0];//从上传的文件集合中获取Part对象
  Part part = request.getPart("file");//通过表单file控件()的名字直接获取Part对象
  //Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
  //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
  String header = part.getHeader("content-disposition");
  //获取文件名
  String fileName = getFileName(header);
  //把文件写到指定路径
  part.write(savePath+File.separator+fileName);
}else {
  //一次性上传多个文件
  for (Part part : parts) {//循环处理上传的文件
    //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
    String header = part.getHeader("content-disposition");
    //获取文件名
    String fileName = getFileName(header);
    //把文件写到指定路径
    part.write(savePath+File.separator+fileName);
  }
}
PrintWriter out = response.getWriter();
out.println("上传成功");
out.flush();
out.close();
   }
   
   public String getFileName(String header) {
     
     String[] tempArr1 = header.split(";");
     
     String[] tempArr2 = tempArr1[2].split("=");
     //获取文件名,兼容各种浏览器的写法
     String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\")+1).replaceAll(""", "");
     return fileName;
   }
   public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
     this.doGet(request, response);
   }
 }

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

总结

以上所述是小编给大家介绍的servlet3文件上传操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143417.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号