java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MultipartFile实现文件上传功能

使用MultipartFile实现文件上传功能

作者:Cz范特西

这篇文章主要介绍了使用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()));
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文