11【SpringMVC的文件上传】


五、文件上传

5.1 回顾文件上传

表单的entype类型必须改为multipart/form-data,提交方式必须为post提交(因为post提交才有请求体)

引入依赖:

<dependencies>
    <!--SpringMVC依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.9.RELEASE</version>
    </dependency>

    <!--Json转换-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>

    <!--Tomcat依赖-->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-api</artifactId>
        <version>8.5.41</version>
    </dependency>

    <!--文件上传依赖-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
</dependencies>

5.2 SpringMVC处理文件上传

5.2.1 配置文件上传解析器

<!--
    配置文件上传的解析器
    bean名称必须为: multipartResolver
 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--文件上传时文件的最大大小(单位:字节)-->
    <property name="maxUploadSize" value="102400000"></property>
    <!--文件上传时,文件名称的编码-->
    <property name="defaultEncoding" value="UTF-8"></property>
</bean>

5.3.2 准备表单

  • Demo01.jsp:
<form action="/demo03/demo01" enctype="multipart/form-data" method="post">
    <input type="file" name="pic">
    <input type="submit">
</form>

5.3.3 编写处理器

package com.dfbz.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.UUID;

/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
@Controller
@RequestMapping("/demo01")
public class Demo01Controller {

    @RequestMapping("/demo01")
    public void demo01(
        // 当表单项名称和形参名不一样可以使用@RequestPart注解来指定名称
        @RequestPart("pic") MultipartFile pic,      
        HttpServletResponse response) throws Exception {


        // 表单项的名称
        String name = pic.getName();

        // 文件的名称
        String fileName = pic.getOriginalFilename();

        // 文件的大小
        long size = pic.getSize();

        // 请求的类型
        String contentType = pic.getContentType();

        // 将前端传递的文件写入到磁盘
        pic.transferTo(new File("D:/000/" + fileName));

        response.setContentType("text/html;charset=utf8");
        response.getWriter().write("<hr/ >name: " + name);
        response.getWriter().write("<hr/ >fileName: " + fileName);
        response.getWriter().write("<hr/ >size: " + size);
        response.getWriter().write("<hr/ >contentType: " + contentType);
    }
}

5.3 多文件上传

5.3.1 准备表单

<form action="/demo01/demo02" enctype="multipart/form-data" method="post">
    <input type="file" name="pics">
    <input type="file" name="pics">
    <input type="file" name="pics">
    <input type="file" name="pics">
    <input type="submit">
</form>

5.3.2 编写处理器

/**
 * 多文件上传
 *
 * @param pics
 * @throws Exception
 */
@RequestMapping("/demo02")
@ResponseBody
public String demo02(MultipartFile[] pics) throws Exception {

    for (MultipartFile file : pics) {
        file.transferTo(new File("D:/000/" + UUID.randomUUID() + "-" + file.getOriginalFilename()));
    }
    return "success";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

緑水長流*z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值