Servlet实现上传文件到服务器

前端页面(upload.html)

   <!--
       要上传文件,必须将表单的提交方式设置为"post",设置表单的enctype属性为"multipart/form-data"
   -->
   <!-- 表单的action必须以项目的根路径开头,这里假设项目根路径为/servlet -->
   <forom action="/servlet/upload" method="post" enctype="multipart/form-data">
      用户名:<input type="text" name="username"/><br/>
      上传文件:<input type="file" name="uploadFile"/><br/>
      <input type="submit" value="上传"/>
   </form>

后端servlet(UploadServelt)

/*
   使用注解@MultipartConfig 将一个Servlet标识为支持上传文件.
   Servlet将enctype属性值"mulipart/form-data"表单的POST请求封装为Part(jakarta.servlet.http.Part)
   通过Part对象对上传的文件进行操作

   注意:只要前端的表单设置了enctype属性为"multipart/form-data",就一定要在后端的Servlet上加上@MultipartConfig注解
   否则Servlet连表单中的普通文本框提交的数据都无法获取
*/
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     // 设置请求的编码(Tomcat10以上版本不需要)
     request.setCharacterEncoding("utf-8");
     // 通过request对象获取普通文本框提交的内容
     String username = request.getParameter("username");
     // 输出该内容
     System.out.println("username : " + username);
     /*
       通过request对象获取上传的文件
        public Part getPart(String name);
          name参数为文件提交框中name属性的属性值
     */
      Part uploadFile = request.getPart("uploadFile");
     /*
       通过Part对象获取文件上传时的名称
        public String getSubmittedFileName();
     */
      String submittedFileName = uploadFile.getSubmittedFileName();
     /*
       获取要在服务器中存储的真实路径
          注意:getRealPath("/") 该参数必须为"/" 
     */
     String realPath = this.getServletContext().getRealPath("/");
     /*
       通过Part对象将上传的文件保存在服务器
         public void write(String fileName)
     */
     uploadFile.write(realPath + "/" + submittedFileName);
    }
}
posted on 2022-08-26 12:33  内心荒漠的流浪者  阅读(311)  评论(0编辑  收藏  举报