下面是一个完整的 Spring Boot 后端示例,用于接收 <form> 提交的文件上传请求(/article/uploadLifeImage 接口),并将上传的文件保存到本地目录。


✅ 一、项目结构

upload-demo/
├── src/
│   └── main/
│       ├── java/com/example/uploaddemo/
│       │   ├── UploadDemoApplication.java
│       │   └── controller/UploadController.java
│       └── resources/
│           └── application.properties
├── pom.xml

✅ 二、依赖配置(pom.xml)

<project xmlns="http://maven.apache.org/POM/4.0.0" ...><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>upload-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>upload-demo</name><description>Spring Boot File Upload Example</description><properties><java.version>17</java.version><spring.boot.version>3.2.0</spring.boot.version></properties><dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 上传需要用到 Spring Web 的 multipart 支持 --></dependencies><build><plugins><!-- Spring Boot Maven Plugin --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

✅ 三、配置文件(application.properties

# 设置文件上传大小限制(可选)
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

✅ 四、主启动类(UploadDemoApplication.java)

package com.example.uploaddemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class UploadDemoApplication {public static void main(String[] args) {SpringApplication.run(UploadDemoApplication.class, args);}
}

✅ 五、控制器(UploadController.java)

package com.example.uploaddemo.controller;import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.ResponseEntity;import java.io.File;
import java.io.IOException;@RestController
@RequestMapping("/article")
public class UploadController {@PostMapping("/uploadLifeImage")public ResponseEntity<String> handleFileUpload(@RequestParam("upload_file") MultipartFile file) {if (file.isEmpty()) {return ResponseEntity.badRequest().body("上传失败,文件为空");}try {// 保存目录String uploadDir = System.getProperty("user.dir") + "/uploads";File dir = new File(uploadDir);if (!dir.exists()) dir.mkdirs();// 保存文件String filePath = uploadDir + "/" + file.getOriginalFilename();file.transferTo(new File(filePath));return ResponseEntity.ok("上传成功,文件路径:" + filePath);} catch (IOException e) {e.printStackTrace();return ResponseEntity.internalServerError().body("上传失败:" + e.getMessage());}}
}

✅ 六、运行项目

  1. 在 IDEA 或命令行执行:

    mvn spring-boot:run
    
  2. 打开浏览器,创建一个 HTML 页面测试:

<form action="http://localhost:8080/article/uploadLifeImage" method="post" enctype="multipart/form-data"><input type="file" name="upload_file" /><input type="submit" value="上传" />
</form>

✅ 七、上传结果

  • 成功上传后文件保存在:

    项目目录/uploads/文件名
    
  • 浏览器返回提示:

    上传成功,文件路径:...
    

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84862.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84862.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84862.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探究 Go 语言中使用 SQLite 数据库

引言 在软件开发中&#xff0c;数据库是管理和存储数据的关键组件。SQLite 作为一款轻量级的嵌入式数据库&#xff0c;因其零配置、高性能和易于集成等特性&#xff0c;成为众多小型项目和嵌入式系统的理想选择。而 Go 语言以其高效、简洁的特点&#xff0c;为操作 SQLite 数据…

Portable Computer Power Adapter

Portable Computer Power Adapter 笔记本电源适配器&#xff0c;将220伏特的交流电转化直流电 现在的适配器真的体积之大&#xff0c;让我无法理解&#xff0c;本来便携计算机为了方便减少体积重量&#xff0c;现在都倒反天罡了。让我无法理解设计师是怎么干出来的。这玩意有2…

Uniapp 网络请求封装专题

目录 一、前言 二、uniapp官方文档 三、举例演示 3.1 使用说明 3.2 Content-Type 3.2.1 ​​基本概念 ​​3.2.2 核心作用 3.2.3 常见 Content-Type 类型及使用场景 1&#xff09;文本类 a&#xff09;text/plain​​​​ b&#xff09;text/html​​ 2&#xf…

2025年渗透测试面试题总结-2025年HW(护网面试) 07(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 07 一、OWASP Top 10 2023核心漏洞 二、XSS窃取Cookie全流程 三、渗透测试五阶段模型…

Seata分布式事务解决框架

Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一个开源的分布式事务解决方案&#xff0c;旨在帮助开发者更容易地在微服务架构中解决分布式事务问题。 你可以把它理解为一个工具箱&#xff0c;专门用来处理微服务之间操作的一致性。…

旧物回收小程序开发:开启绿色生活新方式

在环保理念日益深入人心的今天&#xff0c;每一件旧物都承载着资源再生的无限可能。我们精心打造的旧物回收小程序&#xff0c;宛如一把神奇的钥匙&#xff0c;为你开启绿色生活新方式&#xff01; 想象一下&#xff0c;家中堆积如山的旧衣物、闲置的电子产品、废弃的书籍杂志…

STM32 串口通信②:蓝牙模块HC-05控制单片机

一 前言 上一篇我们已经成功实现单片机和电脑的连接&#xff0c;接下来&#xff0c;我们学习一个有趣的板块&#xff0c;HC-05蓝牙模块&#xff0c;这个蓝牙模块&#xff0c;我们就要建立手机和单片机的通讯啦&#xff0c;还是比较有趣的一个过程&#xff0c;大家可以跟着多操作…

【Verilog】Verilator的TestBench该用C++还是SystemC

Verilator的Testbench&#xff08;测试平台&#xff09;主要使用 C 或 SystemC 来编写。这是由Verilator的工作原理决定的&#xff1a;它将你的Verilog/SystemVerilog设计转换成一个C类&#xff0c;因此你需要一个C环境来实例化和驱动这个类。 下面详细说明这两种方式以及如何…

71-Oracle Undo与Flashback管理(Guarantee设置)深度解析

小伙伴们有没有在操作undo表空间、Flashback管理&#xff0c;时间保留设置&#xff0c;总有些配置需要提前预置好&#xff0c;否则闪回查询和表的时候出现报错。 需短期恢复&#xff08;秒级~小时&#xff09;直接上UNDO_RETENTION同时启用RETENTION GUARANTEE&#xff0c;Und…

单片机——浮点数转换4位数码管显示

浮点数转换4位数码管显示 static char buffer[5]; int DecimalPlace 0; #define HideChar h void DisplayFloatOn4LED(float value) {long integer roundf(value );if (integer > 9999) //4位{integer 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer…

金融行业B端系统布局实战:风险管控与数据可视化的定制方案

摘要 在金融行业&#xff0c;一次小小的数据泄露可能引发千万级资金损失&#xff0c;一次错误的风险评估或许让企业陷入危机。传统 B 端系统布局在应对复杂多变的金融业务时&#xff0c;常出现风险预警滞后、数据杂乱无章的情况&#xff0c;让从业者如履薄冰。如何才能在瞬息万…

融合LSTM与自注意力机制的多步光伏功率预测新模型解析

这篇论文《Improved multistep ahead photovoltaic power prediction model based on LSTM and self-attention with weather forecast data》&#xff08;2024, Applied Energy&#xff09;聚焦在 多步光伏功率预测 中&#xff0c;如何结合 LSTM 与自注意力机制&#xff08;se…

Blazor-内置输入组件

封装的输入组件 InputCheckbox&#xff1a;表示复选框。InputDate&#xff1a;表示类型为 date 的日期选择框。InputFile&#xff1a;表示文件上传。InputNumber&#xff1a;表示数字框。InputRadio&#xff1a;表示单选按钮。InputRadioGroup&#xff1a;表示单选按钮组。Inpu…

Qt源码分析: QChildEvent

本文记录QChildEvent事件相关代码分析。 注1&#xff1a;限于笔者研究水平&#xff0c;难免有表述不当&#xff0c;欢迎批评指正。 注2&#xff1a;博文会不定期更新&#xff0c;敬请关注。 一、QChildEvent的发送 分析QObject::setParent代码&#xff0c;当修改父对象时&…

《Whisper :说明书 》

[论文] [模型卡] [Colab 示例] Whisper 是一种通用的语音识别模型。它基于各种音频的大型数据集进行训练&#xff0c;也是一种多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 方法 Transformer 序列到序列模型针对各种语音处理任务进行训练&#xff0c;…

回溯----8.N皇后

题目链接 /** 将n个棋子放在n*n的棋盘上,不同列,不同行,不同斜线 大致执行流程: 首先选取第一行第一格放置第一个棋子,再从第二行第一个位置开始选取合法的位置(不同行不同列不同斜线)放置棋子,重复上述流程迭代行数, 直到放置n个棋子。 若放置途中出现无合法位置的情况,回溯将…

微机电子拉伸试验机

对于不同材料的试样&#xff0c;由于其化学成分及组织的不同&#xff0c;在拉伸过程中会体现 出不同的物理现象及力学性质。西安力创&#xff08;LETRY&#xff09;公司专业制造WDL/WDW系列微机控制电子万能试验机&#xff0c;主要适用于金属板材、棒材、管材、金属丝、金属箔、…

【数据结构与算法】数据结构核心概念系统梳理

第一章 绪论:基础概念体系 🚩算法:问题求解步骤的描述。 🚩非递归的算法效率更高。 1.1 逻辑结构 vs 存储结构 维度逻辑结构存储结构(物理结构)定义数据元素之间的逻辑关系数据结构在计算机中的实现方式分类线性/树形/图/集合顺序/链式/索引/散列独立性独立于存储结构…

73页PPT | 大数据平台规划与数据价值挖掘应用咨询项目解决方案

推荐摘要&#xff1a;在数字化浪潮中&#xff0c;企业数据量呈几何级增长&#xff0c;却常因缺乏科学规划的大数据平台&#xff0c;陷入数据孤岛、处理效率低下的困境&#xff0c;难以充分挖掘数据价值。特推出大数据平台规划与数据价值挖掘应用咨询项目解决方案&#xff0c;正…

gRPC 与 Protobuf 的深度集成 —— 从服务定义到多语言交互(Go + Java 示例)

在前几篇文章中&#xff0c;我们已经掌握了 Protobuf 的基础语法、高级特性和序列化反序列化操作。本篇文章将深入讲解 gRPC 与 Protobuf 的集成&#xff0c;重点介绍如何通过 .proto 文件定义服务接口&#xff0c;并在 Go 和 Java 中实现 gRPC 服务与客户端的完整交互流程。我…