MultipartFile实现文件上传功能

前言

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()));
    }
}

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值