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

Springboot-文件的上传和下载

1. 创建Spring Boot应用

首先,创建一个Spring Boot项目并添加必要的依赖。可以使用Spring Initializr生成项目。

2. 添加依赖

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

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

3. 配置文件上传

application.properties中配置文件上传的限制(可选):

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

4. 创建控制器类

创建一个控制器类FileController来处理文件的上传和下载:

package com.example.demo.controller;import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.nio.file.*;@RestController
@RequestMapping("/files")
public class FileController {private static final String UPLOAD_DIR = "uploads/";// 上传文件@PostMapping("/upload")public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {try {Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());Files.createDirectories(path.getParent()); // 确保目录存在Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);return ResponseEntity.ok("File uploaded successfully: " + file.getOriginalFilename());} catch (IOException e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file");}}// 下载文件@GetMapping("/download/{filename}")public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String filename) {try {Path path = Paths.get(UPLOAD_DIR + filename);File file = path.toFile();InputStream inputStream = new FileInputStream(file);HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);return new ResponseEntity<>(new InputStreamResource(inputStream), headers, HttpStatus.OK);} catch (IOException e) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);}}
}

5. 启动应用

启动你的Spring Boot应用。确保在项目根目录下创建一个uploads目录,或者根据需要调整UPLOAD_DIR的路径。

6. 测试

  • 上传文件:使用Postman或其他工具,发送POST请求到http://localhost:8080/files/upload,并附上一个文件。
  • 下载文件:发送GET请求到http://localhost:8080/files/download/filename(将filename替换为上传的文件名)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解析 MySQL 数据库的 Python 接口:`mysqlclient` 与 `django-mysql` 实战指南20240904
  • ArcGIS展线/投线教程
  • idea 编译断点运行 tomcat 10.1.28 源码
  • redis的一些重要的基础知识
  • onvif应用--IPC鉴权(认证)
  • Linux起源
  • matlab基本语法
  • windows安装composer
  • 网恋照妖镜源码搭建教程
  • LINUX常用命令-docker-Kubernetes
  • 【机器人工具箱Robotics Toolbox开发笔记(二)】Matlab中机器人工具箱的下载与安装
  • k8s-pod 实战一 (创建pod,启动命令,参数,pod故障排除,拉取命令)
  • Fileupload - Endpoint and OpenAI Generation for the Service
  • 快速幂算法——求解大指数幂
  • 强化学习实操入门随笔
  • php的引用
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • bootstrap创建登录注册页面
  • CSS居中完全指南——构建CSS居中决策树
  • FineReport中如何实现自动滚屏效果
  • java小心机(3)| 浅析finalize()
  • 初探 Vue 生命周期和钩子函数
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 前端之React实战:创建跨平台的项目架构
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用权重正则化较少模型过拟合
  • 新版博客前端前瞻
  • 正则表达式
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (回溯) LeetCode 77. 组合
  • (九)c52学习之旅-定时器
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转)程序员疫苗:代码注入
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .netcore 获取appsettings
  • .net中的Queue和Stack
  • [ SNOI 2013 ] Quare
  • [10] CUDA程序性能的提升 与 流
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [ARM]ldr 和 adr 伪指令的区别
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [C++]C++入门--引用
  • [Doris]阿里云搭建Doris,测试环境1FE 1BE