MultipartFile实现文件上传功能

  • Post author:
  • Post category:其他




前言

MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。在文件上传这方面能帮助我们快速简洁实现。



使用



1、yml配置文件

spring:
  servlet:
    multipart:
      max-file-size: 10MB     #单个最大文件大小,默认是1MB
      max-request-size: 100MB   #总请求文件大小



2、API介绍

	multipartFile.getContentType()//在控制台打印文件的类型
	multipartFile.getName()//返回文件的名称
	multipartFile.getOriginalFilename()//返回文件的原文件名
	multipartFile.getSize() //单位为字节
	multipartFile.getInputStream() //文件转换为输入流
	multipartFile.transferTo(new File("D:/"));
		/*上传的文件需要保存的路径和文件名称,
		  本质上还是使用了流,只不过是封装了步骤,相当于:
			File file = new File("D:/");
	        file.createNewFile();
	        FileOutputStream stream = new FileOutputStream(file);
	        stream.write(multipartFile.getBytes());
	        stream.close();
	    */



3、文件上传示例

@RestController
@Slf4j
public class UploadTest {

    @RequestMapping("/upload")
    public String upLoad(@RequestPart("file") MultipartFile multipartFile){
        log.info("文件上传开始");
        log.info("文件{}",multipartFile.getOriginalFilename());
        
        if (!multipartFile.isEmpty()){
            try {
                //上传的文件需要保存的路径和文件名称,路径需要存在,否则报错
                multipartFile.transferTo(new File("D:/"++multipartFile.getOriginalFilename()));
            } catch (IllegalStateException | IOException e){
                e.printStackTrace();
                return "上传失败";
            }
        } else {
            return "请上传文件";
        }
        return "上传成功";
    }
}


注意:


@RequestPart("file")

主要用来处理content-type为 multipart/form-data 或 multipart/mixed stream 发起的请求,可以获取请求中的参数。

因此在此处,前端上传文件时,key为file,value为文件。



4、postman测试

由于本人只会后端不会做前端,懒得查资料写前端上传文件功能,就使用postman进行测试。

1、将请求方式改为post。

2、Headers中设置设置key=Content-Type,value=multipart/form-data(默认已设置)。

在这里插入图片描述

3、在Body中选择form-data,选择File格式,KEY填写在后端代码中编写的@RequestPart(“file”)中的file,value选择你想要上传的文件。

在这里插入图片描述

4、点击send即可实现上传功能。



文件下载

既然文件上传功能有了,就在此介绍一下如何实现文件下载功能。

@RestController
public class DownTest {

    @RequestMapping("/download")
    public ResponseEntity<Object> download() throws IOException {
        //提供下载的文件的路径
        FileSystemResource file = new FileSystemResource("D:\\cloud/pom.xml");

        HttpHeaders headers = new HttpHeaders();
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        //这里定制下载文件的名称
        headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");

        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(file.contentLength())
                .contentType(MediaType.parseMediaType("application/octet-stream"))//以二进制流的形式返回
                .body(new InputStreamResource(file.getInputStream()));
    }
}



版权声明:本文为weixin_45866737原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。