Servlet学习:(三)Servlet3.0 上传文件

一、注意事项

客户端(浏览器)

  • 表单的提交方法必须是post
  • 必须有一个文件上传组件 <input type="file" name="file"/>
  • 必须设置表单的enctype="multipart/form-data

服务器

  • 在Servelt上添加注解  @MultipartConfig

二、参考

HttpServletRequest 对文件上传的支持

此前,对于处理上传文件的操作一直是让开发者头疼的问题,因为 Servlet 本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。如今这都成为了历史,Servlet 3.0 已经提供了这个功能,而且使用也非常简单。为此,HttpServletRequest 提供了两个方法用于从请求中解析出上传的文件:

  • Part getPart(String name)
  • Collection<Part> getParts()

前者用于获取请求中给定 name 的文件,后者用于获取所有的文件。每一个文件用一个 javax.servlet.http.Part 对象来表示。该接口提供了处理文件的简易方法,比如 write()、delete() 等。至此,结合 HttpServletRequest 和 Part 来保存上传的文件变得非常简单,如下所示:

1

2

3

Part photo = request.getPart("photo");

photo.write("/tmp/photo.jpg");

// 可以将两行代码简化为 request.getPart("photo").write("/tmp/photo.jpg") 一行。

另外,开发者可以配合前面提到的 @MultipartConfig 注解来对上传操作进行一些自定义的配置,比如限制上传文件的大小,以及保存文件的路径等。其用法非常简单,故不在此赘述了。

需要注意的是,如果请求的 MIME 类型不是 multipart/form-data,则不能使用上面的两个方法,否则将抛异常。

URL:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

三、Html

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload File</title>
</head>
<body>
    <h1>Upload File</h1>
    <form action="/uploadServlet" method="post" enctype="multipart/form-data">
        File : <input type="file" name="file"/>
        <input type="submit" name="Submit"/>
    </form>
</body>
</html>

四、Servlet

package com.idark.servlet;

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;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 上传文件
 */
@WebServlet(name = "UploadServlet" , urlPatterns = "/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //创建目录
        File path = new File("d:\\tmp");
        if (!path.exists()){
            path.mkdir();
        }
        //获取文件
        Part img = request.getPart("file");
        //文件全路径
        String filePath = path.getPath() + File.separator + img.getSubmittedFileName();
        //写入文件
        img.write(filePath);
        //输出信息
        System.out.println("File Upload : " + filePath);
        PrintWriter out = response.getWriter();
        out.println("File Upload : " + filePath);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("not support upload file by get");
    }
}

五、验证结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值