IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot文件上传示例代码和过程解析 -> 正文阅读

[Java知识库]SpringBoot文件上传示例代码和过程解析

说明

文件上传,在 PostMan 或者 ApiPost 等常用工具里面大家应该都留意过,当body是from-data(表单提交)的时候,我们可以选择文件进行上传,如下图:

?本文主要介绍的是使用SpringBoot后端接收这个文件。

代码

代码非常简单,SpringBoot项目直接拷贝即可使用

需要下载源码的戳这里? ?update_demo.zip - 蓝奏云

@Slf4j
@RestController
@RequestMapping("/")
public class DemoController {

    @PostMapping(value = "/demo")
    public String uploading(@RequestParam("file") MultipartFile file) {
        String filePath = System.getProperty("java.io.tmpdir") + file.getOriginalFilename();
        log.info("文件上传到了:{}", filePath);
        try (FileOutputStream out = new FileOutputStream(filePath)){
            out.write(file.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
            return "uploading failure";
        }
        log.info("文件上传成功!");
        return "uploading success";
    }

}

测试

使用请求发送工具发送一个请求进行测试,其中file参数选择随便选个文件测试:

?日志成功输出文件上传位置:

?查看对应目录下文件内容:

?经过测试功能正常,我们现在来看下原理。

分析

DispatcherServlet

首先我们打开org.springframework.web.servlet.DispatcherServlet#initStrategies

里面的第一个(图中红色方框)中的就是我们要找的方法:

可以看到对这个对象进行了初始化。

判定

初始化对象之后还不够,需要确定一个请求是不是一个文件上传请求,还是这个类:

?进入这个方法:

进入到这个方法,进入到:org.springframework.web.multipart.commons.CommonsMultipartResolver#isMultipart

可以看到这个方法:org.apache.commons.fileupload.servlet.ServletFileUpload#isMultipartContent

就两个检查:检测POST 方法,判断ContentType 是multipart;

返回到刚才那个check逻辑:?

?正常都调这个方法,位置是:org.springframework.web.multipart.MultipartResolver#resolveMultipart?

这里面进行了判定是不是懒加载,实际上就是把各种需要的参数拼一拼:

官方的解释是:将给定的HTTP请求解析为多部分文件和参数,并将请求包装在一个MultipartHttpServletRequest对象中,该对象提供对文件描述符的访问,并使所包含的参数可以通过标准的ServletRequest方法进行访问。

点击来能看到基本就是获取文件信息解码啥的这堆东西了?

以上就是文件上传的处理过程

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:04:04  更:2022-04-06 16:06:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:21:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码