我们先看一下api文档怎么描述@MultipartConfig的:

* Annotation that may be specified on a {@link javax.servlet.Servlet} * class, indicating that instances of the <tt>Servlet</tt> expect requests * that conform to the <tt>multipart/form-data</tt> MIME type. * <p>Servlets annotated with <tt>MultipartConfig</tt> may retrieve the * {@link javax.servlet.http.Part} components of a given * <tt>multipart/form-data</tt> request by calling * {@link javax.servlet.http.HttpServletRequest#getPart getPart} or * {@link javax.servlet.http.HttpServletRequest#getParts getParts}. @Target (ElementType.TYPE) @Retention (RetentionPolicy.RUNTIME) public @ interface MultipartConfig { * The directory location where files will be stored(译:设置上传文件的临时保存目录) String location() default "" ; * The maximum size allowed for uploaded files.(译:设置上传文件的最大文件大小,单位: 字节) * <p>The default is <tt>-1L</tt>, which means unlimited. long maxFileSize() default - 1 L; * The maximum size allowed for <tt>multipart/form-data</tt>(译:设置上传请求中最大的总大小限制,单位: 字节) * requests * <p>The default is <tt>-1L</tt>, which means unlimited. long maxRequestSize() default - 1 L; * The size threshold after which the file will be written to disk(译:如果文件的大小超过指定的阈值,文件将会被写出到磁盘,单位: 字节) int fileSizeThreshold() default 0 ;

通过上面的定义我们可以知道@MultipartConfig主要用来指明servlet的请求当中包含文件,文件我们通过以下的方式获取:
Part part = req.getPart("filename");

下面是一个简单的示例:

1 前台文件上传页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <title>upload your logo</title>
</head>
<form action="/multipart" method="post" enctype="multipart/form-data">
    Please choose your logo: <input type="file" name="logo"><br>
    <input type="submit" value="submit">
</form>
</body>
</html>

2 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.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = {"/multipart"})
@MultipartConfig(location = "G:\\maven-practice\\sample-web\\files\\",
        maxFileSize = 2, maxRequestSize = 200)
public class MultipartServletDemo extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Part part = req.getPart("logo");
        PrintWriter out = resp.getWriter();
        out.println("file name: " + part.getName());
        out.println("file size: " + part.getSize());
        out.println("file content type: " + part.getContentType());
        out.println("upload successfully");
        out.flush();
        out.close();

这里我们配置请求的最大长度为200bytes, 文件本身最大值为2bytes;

3 执行结果

当我们尝试上传大文件(超过配置的200)时,执行结果如下:
这里写图片描述

当我们试图上传大文件(大于限制的2bytes)

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.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = {"/multipart"})
@MultipartConfig(location = "G:\\maven-practice\\sample-web\\files\\",
        maxFileSize = 2)
public class MultipartServletDemo extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Part part = req.getPart("logo");
        PrintWriter out = resp.getWriter();
        out.println("file name: " + part.getName());
        out.println("file size: " + part.getSize());
        out.println("file content type: " + part.getContentType());
        out.println("upload successfully");
        out.flush();
        out.close();

效果如下:
这里写图片描述

正常情况下,运行结果会是:
这里写图片描述

我们先看一下api文档怎么描述@MultipartConfig的:/** * Annotation that may be specified on a {@link javax.servlet.Servlet} * class, indicating that instances of the <tt>Servlet</tt> expect requests * that conform t
编写好Servlet之后,接下来要告诉Web容器有关于这个Servlet的一些信息。在Servlet 3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息。例如在HelloServlet.java中: @WebServlet(“/hello.view”) public class HelloServlet extends HttpServlet { 只要在Servlet上设置@WebServlet标注,容器就会自动读取当中的信息。上面的@WebServlet告诉容器,如果请求的URL是“/hello.view”,则由HelloSer
Servlet3.0之前,处理上传文件的操作一直是让开发者头疼的问题, 因为Servlet本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。 Servlet3.0提供了对文件上传的支持,通过@MultipartConfig标注和HttpServletRequest的两个新方法getPart()和getParts(), 开发者能够很容易实现文件的上传操作。 表<form>标签中应指定enctype属性值为"multipart/form-data",method属性为"post",同时表单中提供一个<inputtype="file">作用域用于指定上传的文件。 2、服务器通过getInputSream()获取ServletInputS...
SpringBoot关于文件上传配置的几种方式 在进行SpringBoot项目文件临时目录位置及其最大文件传输大小等相关配置的时候,总结几种可以进行配置的方式 1、@MultipartConfig 注解 在 javax.servlet.annotation 包里有一个MultipartConfig 注解来进行文件上传的相关配置 package javax.servlet.annotation; @Target(ElementType.TYPE) @Retention(RetentionPolicy
在使用标签时,需要设置enctype=“multipart/form-data”,指定表单数据的编码方式。enctype属性值说明: application/x-www-form-urlencoded:默认编码方式,只处理表单中的value属性值,这种编码方式会将表单中的值处理成URL编码方式 multipart/form-data:以二进制流的方式处理表单数据 text/plain:当表单action属性为mailto:URL形式时比较方便,适用于直接通过表单发送邮件方式
① form表单的enctype 必须值为:multipart/form-data ② 接收文件上传的servlet,必须有 @MultipartConfig注解 ③ 使用request.getPart(name值) : 获取文件对象 ④ part.write(path) : 进行文件持久化 ⑤ 文件的真实名称在头信息中,从头信息中进行字符串处理,从而获取文件名称 Servlet impor...
@MultipartConfig 该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理。具体如下: 表 5. @MultipartConfig 的常用...
文章目录Java Servlet TechnologyUploading Files with Java Servlet TechnologyThe @MultipartConfig AnnotationThe getParts and getPart Methods实践环境新建项目上传单个文件基于表单上传单个文件测试基于 AJAX 上传单个文件测试上传多个文件基于表单上传多个文件测试基于 AJAX 上传多个文件测试参考 Java Servlet Technology Uploading Files wit
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
@MultipartConfig是一个Servlet注解,用于标识Servlet支持multipart/form-data类型的请求。这种类型的请求通常用于上传文件或数据。当一个Servlet标有@MultipartConfig注解时,容器就会处理这种类型的请求,并将请求参数解析为Part对象,可以通过HttpServletRequest的getPart()方法获取Part对象。 示例代码: ```java @WebServlet(name = "UploadServlet", urlPatterns = { "/upload" }) @MultipartConfig public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); // 获取上传的文件 String fileName = filePart.getSubmittedFileName(); // 获取文件名 InputStream fileContent = filePart.getInputStream(); // 获取文件内容 // 处理上传的文件 在上述例子中,@MultipartConfig注解标识该Servlet支持multipart/form-data类型的请求,容器会自动解析请求参数,并将上传的文件转换为Part对象。可以通过Part对象获取文件名和文件内容,然后进行处理。