JAVA代审学习----multipartfileUpload模块上传过程

multipartfileUpload

MultipartFileUpload是一种处理包含文件上传的表单数据的有效方法。在Spring框架中,通过MultipartFile接口可以方便地处理文件上传操作。

过程复现

1.在idea新建的spring项目下创建jsp文件,并且创建一个类用来控制上传行为。(默认jsp是不解析的,需要我们在修改默认解析配置,并且在pom.xml中引入依赖)
类文件:

package com.example.fileuploaddemo.demos.web;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@Controller

public class multipartfileController {
    @Value("${file.upload.path}")
    private String path;

    @GetMapping("/")
    public String uploadPage() {return "upload";}

    @PostMapping("/upload")
    @ResponseBody
    public String create(@RequestPart MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        String filePath = path + fileName;

        File dest = new File(filePath);
        Files.copy(file.getInputStream(), dest.toPath());
        return "Upload file success : " + dest.getAbsolutePath();

    }
}

依赖:

        <!-- servlet 依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!-- tomcat 的支持.-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

在这里插入图片描述

在这里插入图片描述
multipartfileUpload.jsp文件内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title>文件上传页面</title>
</head>
<body>
<h1>文件上传页面</h1>
<form method="post" action="/upload" enctype="multipart/form-data">
    选择要上传的文件:<input type="file" name="file"><br>
    <hr>
    <input type="submit" value="提交">
</form>
</body>
</html>

2.启动项目,并且在项目中通过访问路径看到如下界面,则表示搭建成功。
在这里插入图片描述
3.在application.properties中配置上传文件路径,选择文件上传。
在这里插入图片描述
上传成功截图:
在这里插入图片描述

代码解析

1.通过jsp页面中的html代码我们可以清晰的看见他通过post的形式提交文件上传至upload路径。
在这里插入图片描述
2.我们回到Controller来读一下java代码。
直接分为三步就可以理清他的逻辑。

第一步:

  • @Controller: 这是一个Spring MVC注解,用于声明这个类是一个Spring Web MVC控制器。控制器负责处理通过HTTP请求映射到的方法。
  • multipartfileController: 这是控制器的类名,通常我们会根据功能给类命名,这里命名为multipartfileController,表明它与处理MultipartFile(即文件上传)有关。
  • @Value(“${file.upload.path}”): 这是Spring的属性注入注解,用于将配置文件(如application.properties或application.yml)中的file.upload.path属性的值注入到path变量中。这个路径用于指定文件上传后的存储位置。

第二步:

  • @ GetMapping(“/”): 这是一个Spring MVC注解,用于将HTTP GET请求映射到uploadPage方法上。当用户访问根路径(/)时,会调用这个方法。
  • uploadPage(): 这个方法返回一个字符串,表示要渲染的视图名称。在这个例子中,返回的视图名称是"upload"。这意味着Spring MVC将查找名为upload的视图模板(通常是一个HTML文件),并渲染它作为HTTP响应发送给客户端。

第三步:

  • @PostMapping(“/upload”): 这是一个Spring MVC注解,用于将HTTP POST请求映射到create方法上。当用户向/upload路径发送POST请求时,会调用这个方法。
  • @ResponseBody: 这个注解表明方法的返回值应该直接作为HTTP响应正文返回,而不是解析为视图模板的名称。
  • create(@RequestPart MultipartFile file): 这个方法接受一个MultipartFile类型的参数,@RequestPart注解用于指示该参数是请求体中的一个部分(在文件上传时,文件通常作为请求体的一部分发送)。MultipartFile是Spring MVC提供的一个接口,用于表示上传的文件。
  • 文件处理逻辑: 方法内部,首先获取文件的原始名称,然后将其与配置的文件路径拼接,形成文件的完整存储路径。接着,使用Files.copy方法将文件的内容从输入流复制到指定路径的文件中。
  • 返回值: 方法最后返回一个字符串,表示文件上传成功,并附上了文件的绝对路径。这个字符串将直接作为HTTP响应正文发送给客户端。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值