Spring Boot 文件操作,上传浏览和删除
Posted 1994july
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 文件操作,上传浏览和删除相关的知识,希望对你有一定的参考价值。
视频演示: https://www.bilibili.com/video/BV1rv411B7fs/
一起来完成以下步骤:
该工程演示Spring Boot如何上传、展示和删除文件
-
页面引擎采用Thymeleaf
-
后端使用Spring Boot
-
文件上传使用Form提交方式(而不是Ajax方式或VUE前后端分离)
#FileControlle.java
package com.deepincoding.fileuploadformpage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.FileSystemUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; import java.io.IOException; import java.net.MalformedURLException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.List; import java.util.stream.Collectors; @Controller public class FileController { //上传文件路径 @Value("${file.base.director}") private String fileBaseDirector; private Path fileBasePath; @Autowired private void createDirectories(){ try { Files.createDirectories(Paths.get(fileBaseDirector)); } catch (IOException e) { e.printStackTrace(); } this.fileBasePath = Path.of(fileBaseDirector); } /** * 首页 * @return */ @GetMapping("/") public String index(){ return "index"; } /** * 上传页面 * @return */ @GetMapping("/upload") public String upload(){ return "upload"; } /** * 获取文件列表 * @return * @throws IOException */ @GetMapping("/files") public String files(Model model) throws IOException { List<FileObject> filesAll = Files.walk(fileBasePath,1) .filter(path -> !path.equals(fileBasePath)) .map(path -> { String url = MvcUriComponentsBuilder.fromMethodName(FileController.class,"loadFile",path.getFileName().toString()).build().toString(); FileObject fileObject = new FileObject(path.getFileName().toString(),url); return fileObject; }).collect(Collectors.toList()); model.addAttribute("files",filesAll); return "files"; } /** * 删除文件 * @param fileName * @return */ @GetMapping("/delete/{fileName}") public String deleteFile(@PathVariable String fileName){ Path deletePath = fileBasePath.resolve(fileName); Boolean isDelete = Boolean.FALSE; try { isDelete = FileSystemUtils.deleteRecursively(deletePath); } catch (IOException e) { e.printStackTrace(); } return "redirect:/files"; } /** * 上传文件事件 * @param file * @return */ @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file){ String fileName = StringUtils.cleanPath(file.getOriginalFilename()); Path path = Path.of(fileBaseDirector + fileName); try { Files.copy(file.getInputStream(),path,StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { e.printStackTrace(); } return "redirect:/files"; } }
以上是关于Spring Boot 文件操作,上传浏览和删除的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot MultipartFile 上传 getOriginalFileName 因浏览器而异