当前位置: 首页 > news >正文

MultipartFile

文件的处理一般都是分为两步,第一步就是文件上传到指定文件夹,第二步是对文件进行处理。

这第一步的文件上传,后端就需要用到spring提供的接口MultipartFile 来进行处理,通过接口的方法transferTo(File dest)对文件进行上传。

MultipartFile 是 Spring 框架中用于处理文件上传的一个接口。它提供了多种方法来操作上传的文件,包括获取文件名、文件大小、文件内容类型、将文件保存到磁盘等。以下是对 MultipartFile 的详细介绍:

一、MultipartFile 的主要方法

方法名称返回类型描述
getOriginalFilename()String获取上传文件的原始文件名
getSize()long获取文件的大小(字节)
getContentType()String获取文件的内容类型(MIME类型)
getInputStream()InputStream获取文件的输入流,用于读取文件内容
transferTo(File dest)void将上传的文件保存到指定路径
  1. 获取文件

    String getOriginalFilename();
    • 返回上传文件的原始文件名。

    • 示例

      MultipartFile file = ...; // 获取上传的文件
      String fileName = file.getOriginalFilename();
      System.out.println("文件名:" + fileName);
  2. 获取文件大小

    long getSize();
    • 返回文件的大小,单位是字节。

    • 示例

      long fileSize = file.getSize();
      System.out.println("文件大小:" + fileSize + " 字节");
  3. 获取文件内容类

    String getContentType();
    • 返回文件的MIME类型,如image/jpegtext/plain等。

    • 示例

      String contentType = file.getContentType();
      System.out.println("文件类型:" + contentType);
  4. 获取文件的输入流

    InputStream getInputStream() throws IOException;
    • 返回文件的输入流,可以用于读取文件内容。

    • 示例

      InputStream inputStream = file.getInputStream();
      // 使用输入流读取文件内容
  5. 将文件保存到磁盘(最重要的方法)

    • 将上传的文件保存到指定的路径。

    • 示例

      File destFile = new File("D:/uploads/" + file.getOriginalFilename());
      file.transferTo(destFile);
      System.out.println("文件已保存到:" + destFile.getAbsolutePath());
  6. void transferTo(File dest) throws IOException, IllegalStateException;

二、使用 MultipartFile 处理文件上传

以下是一个完整的示例,展示如何在Spring Boot应用中使用 MultipartFile 处理文件上传。

1. 添加依赖

pom.xml 文件中添加 Spring Boot Web 依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 创建文件上传的Controller
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;@RestController
@RequestMapping("/upload")
public class FileUploadController {@PostMapping("/single")public String uploadSingleFile(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return "文件为空,请选择一个文件上传!";}// 获取文件名String fileName = file.getOriginalFilename();System.out.println("文件名:" + fileName);// 获取文件大小long fileSize = file.getSize();System.out.println("文件大小:" + fileSize + " 字节");// 获取文件类型String contentType = file.getContentType();System.out.println("文件类型:" + contentType);// 保存文件到磁盘try {File destFile = new File("D:/uploads/" + fileName);file.transferTo(destFile);return "文件已成功上传到:" + destFile.getAbsolutePath();} catch (IOException | IllegalStateException e) {e.printStackTrace();return "文件上传失败:" + e.getMessage();}}
}
3. 配置文件上传的路径

application.properties 文件中配置文件上传的路径:

# 设置文件上传的临时存储路径
spring.servlet.multipart.location=D:/uploads
4. 测试文件上传
  • 启动Spring Boot应用。

  • 使用Postman或其他工具发送一个POST请求到http://localhost:8080/upload/single,在请求体中添加一个名为file的文件字段。

  • 选择一个文件上传,查看控制台输出和文件是否成功保存到指定路径。

三、注意事项

  1. 文件大小限制

    • 默认情况下,Spring Boot 对上传的文件大小有限制(通常是1MB)。如果需要上传较大的文件,需要在 application.properties 文件中配置文件大小限制

      # 设置最大文件大小(例如10MB)
      spring.servlet.multipart.max-file-size=10MB
      # 设置最大请求大小(例如20MB)
      spring.servlet.multipart.max-request-size=20MB
  2. 文件存储路径

    • 确保指定的文件存储路径存在,否则可能会抛出异常。如果路径不存在,可以在代码中创建路径

      File uploadDir = new File("D:/uploads");
      if (!uploadDir.exists()) {uploadDir.mkdirs();
      }
  3. 异常处理

    • 在处理文件上传时,可能会遇到各种异常,如文件为空、文件大小超出限制等。建议在代码中进行适当的异常处理,返回友好的错误信息。

MultipartFile 是Spring框架中处理文件上传的强大工具,它简化了文件上传的流程,使得开发者可以更方便地处理上传的文件。

http://www.xdnf.cn/news/912925.html

相关文章:

  • Date类型时间比较
  • 亚马逊跨境:亚马逊优惠券新规和促销机制大改后的定价策略
  • 代驾数据库
  • ISO 26262-6
  • 箭头函数和普通函数的区别?
  • 在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
  • 电子电路基础2(杂乱)
  • 登高架设作业操作证考试:理论题库高频考点有哪些?
  • MCP协议三种传输机制全解析
  • unity Addressable的基本使用
  • Anthropic 的交互式提示工程教程:Claude 用户的实战指南
  • AI任务相关解决方案6-模糊神经网络与强化学习融合,优化PID参数,适合高精度、多变量耦合系统
  • 大白话解释SMBus2.0
  • java 编程基础入门级超级完整版教程指南
  • 微信小程序实现膳食营养计算
  • Java调用大模型API实战指南
  • IBM官网新闻爬虫代码示例
  • 【量化】量化策略交易
  • Go性能剖析工具:pprof实战指南
  • JS手写代码篇---手写函数柯里化
  • Dify中聊天助手、agent、文本生成、chatflow、工作流模式解读分析与对比
  • 【java】在springboot中实现证书双向验证
  • 告别繁琐配置:在线运行 Matplotlib 画图,Python 环境免安装新体验!
  • 嵌入(Embedding)技术的实现原理与应用场景解析
  • 基于KNN算法的入侵检测模型设计与实现【源码+文档】
  • vue3 按钮 增加快捷方式
  • 易思维报考上市:国投基金清仓退出,郭寅“套现”超6500万元
  • Gerrit相对Git提供了一个特有的命名空间“refs/for/”用来定义我们的提交上传到哪个branch
  • c++重点知识总结
  • win10/win11禁止系统更新