Servlet3.0文件上传

Posted 清风徐来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet3.0文件上传相关的知识,希望对你有一定的参考价值。

使用文件上传需要引入Servlet jar和javaee jar,我这里使用的是Servlet3.1.0版和javaee7

<!--java ee-->
        <dependency>
            <groupId>javaee</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7</version>
        </dependency>

        <!-- Servlet3.0 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

  

客户端编程

        要上传文件,必须利用 multipart/form-data 设置HTML表单的enctype属性值,指在告诉服务器,向服务器发送二进制数据。

       这个表单中必须包含类型file的一个输入元素,它会被显示成一个按钮,单击它时,会打开一个对话框,供我们选择文件。

 

表单页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Servlet文件上传</title>
</head>
<body>
<form action="/servlet/FileServlet" method="post" enctype="multipart/form-data">
    选择文件:<input type="file" name="file"/>
    <input type="submit"/>
</form>

</body>
</html>

  

服务器端

 MultipartConfig可以带有以下属性,这些全部是可选的:

        maxFileSize:表示最多可上传的文件容量。超过设定值的文件将会遭到拒绝。maxFileSize 的默认值为-1,表示不受限制。

        maxRequestSize:表示允许多部分http请求的最大容量。它的默认值为-1,表示它是不受限制的。

        location:将上传的文件保存到磁盘中的指定位置,调用Part 中的write 方法将用到它。

        fileSizeThreshold:设定一个溢出尺寸,超过这个值之后,上传的文件将被写入磁盘。

    在一个由多部分组成的请求中,每一个表单域,包括非文本域,都会被转换成一个Part。

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;

/**
 * Created by Administrator on 2018/4/3.
 */

/**
 * 引入java Servlet3.1.0版本
 * 使用javaee7.0版本
 */
//设置上传路径
@MultipartConfig(location = "D:\\\\ioTest\\\\")
public class FileServlet extends HttpServlet {
    //使用Servlet3.0实现文件上传
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        //获取上传文件
        Part part=request.getPart("file");
        //上传文件          上传文件名称
        part.write(part.getSubmittedFileName());

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

  

最后注意一点,如果出现以下错误,很有可能是你的tomcat自带的servletapi版本太低,建议最好不要直接更换lib下的jar文件,

因为很有可能会发生冲突,所以还是建议在网上重新下载一个高版本的tomcat,

 

以上是关于Servlet3.0文件上传的主要内容,如果未能解决你的问题,请参考以下文章

Servlet3.0文件上传

Servlet3.0简化实现文件上传

Servlet3.0文件上传

什么年代了,你还不知道 Servlet3.0 中的文件上传方式?

Servlet3.0上传文件

Servlet编程专题11之Servlet3.0特性实现文件上传