在Spring Boot中实现文件上传与管理

在Spring Boot中实现文件上传与管理

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

在现代应用程序中,文件上传与管理是一个常见的需求。在 Spring Boot 中,可以非常方便地实现文件上传和管理。本文将详细介绍如何在 Spring Boot 中实现文件上传功能,包括创建上传接口、文件存储、文件访问等方面的内容。我们将提供示例代码,帮助你快速实现文件上传与管理功能。

文件上传接口实现

1. 添加依赖

首先,需要在 pom.xml 中添加相关的依赖,以支持文件上传功能。Spring Boot 的 spring-boot-starter-web 已经包含了对文件上传的基本支持。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 配置文件上传

Spring Boot 默认使用 CommonsMultipartFile 作为文件上传的对象。你可以在 application.properties 文件中配置文件上传的最大大小限制:

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

3. 创建文件上传控制器

接下来,我们创建一个文件上传的控制器,处理文件上传请求。

package cn.juwatech.fileupload;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;@RestController
@RequestMapping("/files")
public class FileUploadController {private static final String UPLOAD_DIR = "uploads/";@PostMapping("/upload")public String handleFileUpload(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return "No file uploaded";}File uploadDir = new File(UPLOAD_DIR);if (!uploadDir.exists()) {uploadDir.mkdirs();}try {File destinationFile = new File(UPLOAD_DIR + file.getOriginalFilename());file.transferTo(destinationFile);return "File uploaded successfully: " + destinationFile.getAbsolutePath();} catch (IOException e) {e.printStackTrace();return "File upload failed";}}
}

在上述代码中,我们定义了一个 FileUploadController 类,它包含一个 handleFileUpload 方法来处理文件上传。上传的文件将被保存到服务器的 uploads 目录下。

文件管理

1. 列出文件

除了上传文件,我们还需要提供一个接口来列出已上传的文件:

package cn.juwatech.fileupload;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/files")
public class FileListController {private static final String UPLOAD_DIR = "uploads/";@GetMapping("/list")public List<String> listFiles() {File folder = new File(UPLOAD_DIR);File[] files = folder.listFiles((dir, name) -> !name.startsWith("."));List<String> fileNames = new ArrayList<>();if (files != null) {for (File file : files) {fileNames.add(file.getName());}}return fileNames;}
}

FileListController 提供了一个 listFiles 方法,列出 uploads 目录中的所有文件。

2. 下载文件

要实现文件下载功能,我们可以创建一个控制器来处理下载请求:

package cn.juwatech.fileupload;import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.File;@RestController
@RequestMapping("/files")
public class FileDownloadController {private static final String UPLOAD_DIR = "uploads/";@GetMapping("/download/{filename:.+}")public ResponseEntity<Resource> downloadFile(@PathVariable String filename) {File file = new File(UPLOAD_DIR + filename);if (!file.exists()) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);}Resource resource = new FileSystemResource(file);return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"").body(resource);}
}

FileDownloadController 提供了一个 downloadFile 方法,允许用户通过指定文件名下载文件。

3. 删除文件

为了支持文件删除操作,可以添加一个删除接口:

package cn.juwatech.fileupload;import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.File;@RestController
@RequestMapping("/files")
public class FileDeleteController {private static final String UPLOAD_DIR = "uploads/";@DeleteMapping("/delete/{filename:.+}")public String deleteFile(@PathVariable String filename) {File file = new File(UPLOAD_DIR + filename);if (file.delete()) {return "File deleted successfully";} else {return "File not found or delete failed";}}
}

FileDeleteController 提供了一个 deleteFile 方法,允许用户删除指定的文件。

前端页面(可选)

可以使用 Thymeleaf 或其他模板引擎来创建前端页面以支持文件上传和管理。以下是一个简单的 HTML 表单示例,用于上传文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>File Upload</title>
</head>
<body><h1>File Upload</h1><form action="/files/upload" method="post" enctype="multipart/form-data"><input type="file" name="file" /><button type="submit">Upload</button></form>
</body>
</html>

这个 HTML 文件提供了一个简单的文件上传表单,用户可以选择文件并提交上传请求。

总结

在 Spring Boot 中实现文件上传与管理非常简单。通过配置文件上传、创建文件上传、下载、列表和删除接口,我们可以轻松地处理文件操作。结合前端页面,可以提供一个完整的文件管理系统。希望这些示例能帮助你实现你自己的文件管理功能。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

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

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

相关文章

JVM基本知识——运行空间

JVM&#xff08;Java Virtual Machine&#xff09;即Java虚拟机&#xff0c;是负责读取java字节码&#xff0c;并在实际的硬件环境中运行。 JVM可以分为三部分&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、内存空间、执行引擎 内存空间&#xff08;运行时…

“狂飙”过后,大模型未来在何方?

2024年6月14日&#xff0c;第六届“北京智源大会”在中关村展示中心开幕。 开幕现场&#xff0c;智源研究院、OpenAI、百度、零一万物、百川智能、智谱AI、面壁智能等国内主流大模型公司CEO与CTO&#xff0c;人工智能顶尖学者和产业专家&#xff0c;在围绕人工智能关键技术路径…

【计算机网络】计算机网络的性能指标(上篇)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️计算机网络】 文章目录 前言计算机网络的性能指标速率数据量速率的定义计算方法与测量影响因素优化方法 带宽带宽的定义影响因素计算方法优化方法 吞吐量定义测量与测试影响因素与带宽的区别提升方法…

数据结构(栈)

文章目录 一、概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压…

docker compose 容器 编排分组

遇到问题&#xff1a;执行docker compose up -d 后docker compose 创建的容器们 在desktop-docker 中都在docker下一堆 搜索想着能不能把这个docker名字改一下&#xff0c;但是都没有找到这样的一个方案&#xff1b; 最后发现&#xff0c;我执行docker compose up -d 命令所在…

7. LangChain4j如何使用统一api调用?

前言 当我们对接LangChain4j的时候&#xff0c;面对复杂的各种各样的大模型的api的对接&#xff0c;让很多开发者感到力不从心。在每个大模型的api都不一样的时候&#xff1f;该如何快捷的切换模型的使用呢&#xff1f; 这时&#xff0c;One-API应运而生&#xff0c;它以其简洁…

面向初学者和专家的 40 大机器学习问答(2024 年更新)

面向初学者和专家的 40 大机器学习问答(2024 年更新) 一、介绍 机器学习是人工智能的重要组成部分,目前是数据科学中最受欢迎的技能之一。如果你是一名数据科学家,你需要擅长 python、SQL 和机器学习——没有两种方法。作为 DataFest 2017 的一部分,我们组织了各种技能测…

windows ssh的登录,私钥权限太开放 WARNING: UNPROTECTED PRIVATE KEY FILE!

问题描述 ssh -i wang -D localhost:1080 wangsg.ks99.topBad permissions. Try removing permissions for user Permissions for xxx are too open. F:\pms\pms-gpg-key\ssh-key\wang>ssh -i wang -D localhost:1080 wangsg.ks99.top Bad permissions. Try removing perm…

flutter 充电气泡

前言&#xff1a; 之前一直看到 有手机充电的时候 有气泡从Type-C 的位置冒泡上来 慢慢上移&#xff0c; 然后和上面的圆圈 会和&#xff0c;感觉还是挺好看的。今天试了下用 Flutter 实现了一版本。大致效果如下&#xff0c;而且气泡 和 气泡直接还可以粘黏 实现原理&#xff…

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师&#xff0c;必须要掌握应用开发技能吗&#xff1f;搞工程肯定是必须要会界面开发&#xff0c;QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例&#xff0c;搭建应用开发环境&#xff0c;演示深度学习模型的QT应用案例。 开发…

newton算法实现的div的verilog

代码如下 module cordicDiv (input CLOCK,RESET,input iCall, input [31:0]dividend,input [31:0]divisor,output [31:0]quotient );reg signed [7:0]e;reg signed [31:0]f,rp,dd,x0,x1;reg signed [63:0]q;reg [7:0]i;reg isDone,isSign,isE;always ( posedge CLOCK or nege…

windows USB 设备驱动开发-开发Type C接口的驱动程序(三)

编写 USB Type C 端口控制器驱动程序 如果 USB Type-C 硬件实现 USB Type-C 或电源传送 (PD) 物理层&#xff0c;但未实现供电所需的状态机&#xff0c;则需要编写 USB Type-C 端口控制器驱动程序。 在 Windows 10 版本 1703 中&#xff0c;USB Type-C 体系结构已得到改进&am…

RKE部署k8s

移除docker&#xff08;非必要&#xff09; rm -rf /etc/docker rm -rf /run/docker rm -rf /var/lib/dockershim rm -rf /var/lib/docker yum list installed | grep docker yum remove ***rke部署k8s集群 cat > /etc/sysctl.conf << EFO net.ipv4.ip_forward 1 n…

【VUE学习】day03-过滤器filter

VUE学习第三天 过滤器filter全局过滤器私有过滤器 过滤器filter 作用&#xff1a;常见的文本格式化使用场景&#xff1a;插值表达式、v-bind用法&#xff1a;{{msg | filterName}} ; v-bind:属性‘msg | filterName’ msg:需要格式化的文本信息&#xff08;管道符前面的数据&a…

pytorch学习(十)优化函数

优化函数主要有&#xff0c;SGD, Adam&#xff0c;RMSProp这三种&#xff0c;并且有lr学习率&#xff0c;momentum动量&#xff0c;betas等参数需要设置。 通过这篇文章&#xff0c;可以学到pytorch中的优化函数的使用。 1.代码 代码参考《python深度学习-基于pytorch》&…

postman使用说明

Postman是一款非常流行的API开发、测试和文档生成工具&#xff0c;它可以帮助开发人员轻松地创建和管理API请求&#xff0c;并提供了强大的功能来模拟和测试API响应。在本文中&#xff0c;我将介绍如何使用Postman来创建和管理API请求&#xff0c;以及如何使用它的高级功能来测…

Java里的引用详解

1.体验方法引用 方法引用的出现原因 在使用Lambda表达式的时候&#xff0c;我们实际上传递进去的代码就是一种解决方案&#xff1a;拿参数做操作 那么考虑一种情况&#xff1a;如果我们在Lambda中所指定的操作方案&#xff0c;已经有地方存在相同方案&#xff0c;那是否还有必要…

2024最新教程,在docker中安装kali,并配置ssh连接

docker的基本使用&#xff1a;搭建高效攻防靶场vulfocus与Docker仓库管理实战&#xff1a;从听说到入门 拉取kali官方镜像 docker pull kalilinux/kali-rolling 启动一个kali镜像&#xff0c;将容器中的22端口映射到主机100端口&#xff0c;方便ssh直接连接 docker run -it…

白骑士的PyCharm教学基础篇 1.3 调试与运行

系列目录 上一篇&#xff1a; 配置与调试环境 配置调试环境 选择解释器 在 PyCharm 中选择正确的 Python 解释器&#xff1a;依次点击 “File” -> “Settings” -> “Project: [项目名]” -> “Project Interpreter”&#xff0c;选择或添加解释器。 配置运行/…

Model Import Settings

前言 在可视化3D世界中&#xff0c;模型是3D世界的核心&#xff0c;你可以没有贴图&#xff0c;可以没有特效&#xff0c;甚至可以没有用户交互界面&#xff0c;但必须得有模型来描述世界的基本样貌。 在3D世界中&#xff0c;由点线面构成了模型的轮廓&#xff1b;由UV和纹理&a…