一、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
相关文章:
设计网站制作公司有哪些,制作网页教程?
内部网站制作流程,如何建立公司内部网站?
建站之星安装后如何自定义网站颜色与字体?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
临沂网站制作企业,临沂第三中学官方网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
建站之星如何配置系统实现高效建站?
视频网站制作教程,怎么样制作优酷网的小视频?
外贸公司网站制作哪家好,maersk船公司官网?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
已有域名如何快速搭建专属网站?
安徽网站建设与外贸建站服务专业定制方案
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
建站之星微信建站一键生成小程序+多端营销系统
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
济南网站制作的价格,历城一职专官方网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
javascript中对象的定义、使用以及对象和原型链操作小结
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站之星备案流程有哪些注意事项?
怎么将XML数据可视化 D3.js加载XML
如何在宝塔面板中创建新站点?
Python如何创建带属性的XML节点
Android使用GridView实现日历的简单功能
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
h5网站制作工具有哪些,h5页面制作工具有哪些?
网页设计网站制作软件,microsoft office哪个可以创建网页?
公司门户网站制作流程,华为官网怎么做?
学校建站服务器如何选型才能满足性能需求?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
利用JavaScript实现拖拽改变元素大小
如何快速使用云服务器搭建个人网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
建站之星后台密码如何安全设置与找回?
宁波自助建站系统如何快速打造专业企业网站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何选择可靠的免备案建站服务器?
建站之星3.0如何解决常见操作问题?
如何高效利用亚马逊云主机搭建企业网站?
如何用低价快速搭建高质量网站?
如何注册花生壳免费域名并搭建个人网站?
想学网站制作怎么学,建立一个网站要花费多少?
如何快速搭建高效WAP手机网站吸引移动用户?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何高效生成建站之星成品网站源码?
如何通过老薛主机一键快速建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。