基于SpringBoot上传任意文件功能的实现
发布时间 - 2026-01-11 02:36:04 点击率:次一、pom文件依赖的添加
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
二、controller层
@Controller
public class FileUploadController {
private final StorageService storageService;
@Autowired
public FileUploadController(StorageService storageService) {
this.storageService = storageService;
}
//展示上传过的文件
@GetMapping("/")
public String listUploadedFiles(Model model) throws IOException {
model.addAttribute("files", storageService.loadAll().map(path ->
MvcUriComponentsBuilder.fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString())
.build().toString())
.collect(Collectors.toList()));
return "uploadForm";
}
//下载选定的上传的文件
@GetMapping("/files/{filename:.+}")
@ResponseBody
public ResponseEntity<Resource> serveFile(@PathVariable String filename) {
Resource file = storageService.loadAsResource(filename);
return ResponseEntity
.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"")
.body(file);
}
//上传文件
@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
storageService.store(file);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded " + file.getOriginalFilename() + "!");
return "redirect:/";
}
@ExceptionHandler(StorageFileNotFoundException.class)
public ResponseEntity<?> handleStorageFileNotFound(StorageFileNotFoundException exc) {
return ResponseEntity.notFound().build();
}
}
三、实现的service层
@Service
public class FileSystemStorageService implements StorageService {
private final Path rootLocation;
@Autowired
public FileSystemStorageService(StorageProperties properties) {
this.rootLocation = Paths.get(properties.getLocation());
}
@Override
public void store(MultipartFile file) {
try {
if (file.isEmpty()) {
throw new StorageException("Failed to store empty file " + file.getOriginalFilename());
}
Files.copy(file.getInputStream(), this.rootLocation.resolve(file.getOriginalFilename()));
} catch (IOException e) {
throw new StorageException("Failed to store file " + file.getOriginalFilename(), e);
}
}
@Override
public Stream<Path> loadAll() {
try {
return Files.walk(this.rootLocation, 1)
.filter(path -> !path.equals(this.rootLocation))
.map(path -> this.rootLocation.relativize(path));
} catch (IOException e) {
throw new StorageException("Failed to read stored files", e);
}
}
@Override
public Path load(String filename) {
return rootLocation.resolve(filename);
}
@Override
public Resource loadAsResource(String filename) {
try {
Path file = load(filename);
Resource resource = new UrlResource(file.toUri());
if(resource.exists() || resource.isReadable()) {
return resource;
}
else {
throw new StorageFileNotFoundException("Could not read file: " + filename);
}
} catch (MalformedURLException e) {
throw new StorageFileNotFoundException("Could not read file: " + filename, e);
}
}
@Override
public void deleteAll() {
FileSystemUtils.deleteRecursively(rootLocation.toFile());
}
@Override
public void init() {
try {
Files.createDirectory(rootLocation);
} catch (IOException e) {
throw new StorageException("Could not initialize storage", e);
}
}
}
四、在application.properties文件上配置上传的属性
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB
五、服务启动时的处理
六、测试成功的结果
以上这篇基于SpringBoot上传任意文件功能的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# SpringBoot上传任意文件
# 详解SpringBoot文件上传下载和多文件上传(图文)
# springboot实现文件上传和下载功能
# SpringBoot实现文件上传下载功能小结
# springboot 文件上传大小配置的方法
# SpringBoot限制文件或图片上传大小的两种配置方法
# SpringBoot文件上传控制及Java 获取和判断文件头信息
# 全面解析SpringBoot文件上传功能
# Springboot上传excel并将表格数据导入或更新mySql数据库的过程
# SpringBoot 文件上传和下载的实现源码
# SpringBoot+fileUpload获取文件上传进度
# 上传
# 给大家
# 希望能
# 这篇
# 小编
# 启动时
# 大家多多
# 上传文件
# fromMethodName
# serveFile
# MvcUriComponentsBuilder
# path
# build
# collect
# getFileName
# toString
# map
# model
# throws
# listUploadedFiles
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
教学论文网站制作软件有哪些,写论文用什么软件
?
Python结构化数据采集_字段抽取解析【教程】
如何在VPS电脑上快速搭建网站?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何实现一对一模型关联?(Eloquent示例)
IOS倒计时设置UIButton标题title的抖动问题
创业网站制作流程,创业网站可靠吗?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
C#如何调用原生C++ COM对象详解
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Java垃圾回收器的方法和原理总结
如何快速上传建站程序避免常见错误?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
黑客入侵网站服务器的常见手法有哪些?
使用Dockerfile构建java web环境
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
php 三元运算符实例详细介绍
韩国服务器如何优化跨境访问实现高效连接?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何快速查询网址的建站时间与历史轨迹?
如何在云主机上快速搭建多站点网站?
利用python获取某年中每个月的第一天和最后一天
js实现点击每个li节点,都弹出其文本值及修改
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
详解jQuery中的事件
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
,南京靠谱的征婚网站?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
如何在建站宝盒中设置产品搜索功能?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
大连 网站制作,大连天途有线官网?
如何挑选高效建站主机与优质域名?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
iOS UIView常见属性方法小结
如何在云服务器上快速搭建个人网站?
如何快速辨别茅台真假?关键步骤解析
下一篇:linux服务怎么用svn命令
下一篇:linux服务怎么用svn命令

