当前位置:   article > 正文

3.SpringBoot实现文件上传_springboot commonsmultipartfile

springboot commonsmultipartfile

SpringBoot实现文件上传

SpringMVC 文件上传

第一种方式

  1. 使用 CommonsMultipartResolver 解析器(依赖 commons 下的fileupload.jar), 解析器的bean ID 必须是 multipartResolver
  2. 在 控制层, 使用 MultipartFile 来接收 上传的文件

文件上传要求form表单的请求方式必须为post,并且添加属性enctype=“multipart/form-data”

<form action="${pageContext.request.contextPath}/goods/save" class="form" method="post" enctype="multipart/form-data">
  • 1

SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

上传步骤:

a>添加依赖:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

b>在SpringMVC的配置文件中添加配置:

<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
    <bean id="multipartResolver" 				         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"/>
        <!--上传文件支持的最大大小   默认值为-1  不限制大小-->
        <property name="maxUploadSize" value="-1"/>
    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

c>控制器方法:

@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
    //获取上传的文件的文件名
    String fileName = photo.getOriginalFilename();
    //处理文件重名问题
    String hzName = fileName.substring(fileName.lastIndexOf("."));
    fileName = UUID.randomUUID().toString() + hzName;
    //获取服务器中photo目录的路径
    ServletContext servletContext = session.getServletContext();
    String photoPath = servletContext.getRealPath("photo");
    File file = new File(photoPath);
    if(!file.exists()){
        file.mkdir();
    }
    String finalPath = photoPath + File.separator + fileName;
    //实现上传功能
    photo.transferTo(new File(finalPath));
    return "success";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第二种方式

  1. 使用 StandardServletMultipartResolver 解析器 (依赖 servlet)
  2. 在 控制层,使用 Part 来接收上传的文件

SpringBoot 实现文件上传 (默认采用的是 StandardServletMultipartResolver )

第一种方式

spring:
  servlet:
    multipart:
      max-file-size: -1  	# 不限制文件上传的大小
      enabled: true  		# 可以不用写, 默认就是 true 
  • 1
  • 2
  • 3
  • 4
  • 5

在 控制层可以使用 Part 来接收文件上传的对象

@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * 实现文件上传与下载
     * @param part
     * @return
     */
    @PostMapping("/upload")
    public ResponseEntity<byte[]> upload(@RequestPart("photo") Part part) throws Exception{
        //将上传的图片转换为流
        InputStream inputStream = part.getInputStream();
        //将流转为字节数组
        byte[] bytes = inputStream.readAllBytes();
        //设置响应头
        return ResponseEntity.ok().contentType(MediaType.IMAGE_GIF).body(bytes);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

第二种方式

  • 禁用springboot自带的文件上传自动配置
spring:
  servlet:
    multipart:
      enabled: false 
  • 1
  • 2
  • 3
  • 4
  • 在 SpringMVC 容器中, 添加 一个 MultipartResolver bean 对象
   @Bean("multipartResolver")
    public MultipartResolver multipartResolver() {

        CommonsMultipartResolver resolver =  new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setMaxUploadSize(-1);

        return resolver ;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 添加pom依赖
        <!--new CommonsMultipartResolver()文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 在 控制层 ,使用 MutipartFile 接收上传的文件
    /**
     * 第二种文件上传的方式   需要引入jar依赖
     * photo为接收图片的参数名
     * @param part
     * @return
     * @throws Exception
     */
    @PostMapping("/upload2")
    public ResponseEntity<byte[]> upload2(@RequestParam("photo") MultipartFile part) throws Exception{
        byte[] bytes = part.getBytes();
        //设置响应头
        return ResponseEntity.ok().contentType(MediaType.IMAGE_GIF).body(bytes);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号