当前位置:

首页 > 编程开发 > 如何使用Java SpringBoot实现文件上传功能

如何使用Java SpringBoot实现文件上传功能

测试代码pom.xml:4.0.0org.springframework.bootspring-boot-starter-parent2.6.2jarcom.kavenspringboot0.0.1-SNAPSHOTspringbootspringboot1.8org.springframework.bootspring-boot-starter-weborg.projectlomboklombokorg.springframework.bootspring-boot-maven-pluginapplic

本文目录

    测试代码

    pom.xml:

    
    
        4.0.0
    
        
            org.springframework.boot
            spring-boot-starter-parent
            2.6.2
        
    
        jar
    
        com.kaven
        springboot
        0.0.1-SNAPSHOT
    
        springboot
        springboot
    
        
            1.8
        
    
        
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.projectlombok
                lombok
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
            
        
    

    application.properties(配置文件):

    spring.servlet.multipart.max-file-size=500MB
    spring.servlet.multipart.max-request-size=500MB

    max-file-size:指定允许上传文件的最大大小,默认值为1MB。

    max-request-size:指定允许multipart/form-data请求的最大大小,默认值为10MB。

    上传接口:

    package com.kaven.springboot.controller;
    
    import org.apache.tomcat.util.http.fileupload.IOUtils;
    import org.springframework.http.HttpStatus;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    @RestController
    public class FilesController {
    
        @PostMapping(value="/upload", headers="content-type=multipart/form-data")
        public String upload(@RequestParam(value = "file") MultipartFile file,
                             HttpServletResponse response) throws IOException, InterruptedException {
    
            System.out.println("有文件上传请求进来了");
            FileOutputStream fileOutputStream = null;
            InputStream inputStream = null;
    
            try {
                // 上传文件是否存在
                if (file != null && !file.isEmpty()) {
                    // 如果上传文件存在,获取它的原始文件名
                    String fileName = file.getOriginalFilename();
                    if (StringUtils.hasText(fileName)) {
                        // 将上传文件存储在服务器的E盘下(Windows)
                        java.io.File outFile = new java.io.File("E:\" + fileName);
                        // 基于outFile创建文件输出流实例
                        fileOutputStream = new FileOutputStream(outFile);
                        // 获取上传文件的输入流
                        inputStream = file.getInputStream();
                        /*
                        * 将字节从输入流复制到输出流
                        * 此方法在内部会缓冲输入,因此无需使用BufferedInputStream
                        * 大型流(超过2GB)将在复制完成后返回字节复制值-1 ,因为无法将正确的字节数作为int返回
                        * 对于大型流,需要使用copyLarge(InputStream, OutputStream)方法
                        * 参数:
                        * input – 要读取的InputStream
                        * output - 要写入的OutputStream
                        * */
                        IOUtils.copy(inputStream, fileOutputStream);
                    }
                }
                else {
                    // 文件不存在
                    response.setStatus(HttpStatus.BAD_REQUEST.value());
                    return "文件不存在";
                }
            } catch (Exception e) {
                // 文件上传错误
                e.printStackTrace();
                response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
                return "文件上传错误";
            } finally {
                if (fileOutputStream != null) {
                    fileOutputStream.flush();
                    fileOutputStream.close();
                }
            }
            // 文件上传成功
            response.setStatus(HttpStatus.OK.value());
            return "文件上传成功";
        }
    }

    启动类:

    package com.kaven.springboot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication application = new SpringApplication(SpringbootApplication.class);
            application.run(args);
        }
    }

    使用Postman进行测试。

    如何使用Java SpringBoot实现文件上传功能

    如何使用Java SpringBoot实现文件上传功能

    上传的文件是完整的,可以播放(视频文件)。

    如何使用Java SpringBoot实现文件上传功能

    上传文件不存在。

    如何使用Java SpringBoot实现文件上传功能

    控制台的输出。

    如何使用Java SpringBoot实现文件上传功能

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Yandex官网入口及网页搜索使用方法
    Yandex官网入口及网页搜索使用方法

    Yandex官网入口是https://www.yondex.net/,该平台支持多语言切换、智能搜索匹配、虚拟键盘变更及实时翻译,提供地图、图片、新闻、购物等垂直服务,并具备账户同步、隐私管理、个性化首页和云存储等功能。

    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。