0


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

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

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

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

文件上传接口实现

1. 添加依赖

首先,需要在

  1. pom.xml

中添加相关的依赖,以支持文件上传功能。Spring Boot 的

  1. spring-boot-starter-web

已经包含了对文件上传的基本支持。

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

2. 配置文件上传

Spring Boot 默认使用

  1. CommonsMultipartFile

作为文件上传的对象。你可以在

  1. application.properties

文件中配置文件上传的最大大小限制:

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

3. 创建文件上传控制器

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

  1. packagecn.juwatech.fileupload;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.multipart.MultipartFile;importjava.io.File;importjava.io.IOException;@RestController@RequestMapping("/files")publicclassFileUploadController{privatestaticfinalStringUPLOAD_DIR="uploads/";@PostMapping("/upload")publicStringhandleFileUpload(@RequestParam("file")MultipartFile file){if(file.isEmpty()){return"No file uploaded";}File uploadDir =newFile(UPLOAD_DIR);if(!uploadDir.exists()){
  2. uploadDir.mkdirs();}try{File destinationFile =newFile(UPLOAD_DIR+ file.getOriginalFilename());
  3. file.transferTo(destinationFile);return"File uploaded successfully: "+ destinationFile.getAbsolutePath();}catch(IOException e){
  4. e.printStackTrace();return"File upload failed";}}}

在上述代码中,我们定义了一个

  1. FileUploadController

类,它包含一个

  1. handleFileUpload

方法来处理文件上传。上传的文件将被保存到服务器的

  1. uploads

目录下。

文件管理

1. 列出文件

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

  1. packagecn.juwatech.fileupload;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.File;importjava.io.FilenameFilter;importjava.util.ArrayList;importjava.util.List;@RestController@RequestMapping("/files")publicclassFileListController{privatestaticfinalStringUPLOAD_DIR="uploads/";@GetMapping("/list")publicList<String>listFiles(){File folder =newFile(UPLOAD_DIR);File[] files = folder.listFiles((dir, name)->!name.startsWith("."));List<String> fileNames =newArrayList<>();if(files !=null){for(File file : files){
  2. fileNames.add(file.getName());}}return fileNames;}}
  1. FileListController

提供了一个

  1. listFiles

方法,列出

  1. uploads

目录中的所有文件。

2. 下载文件

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

  1. packagecn.juwatech.fileupload;importorg.springframework.core.io.FileSystemResource;importorg.springframework.core.io.Resource;importorg.springframework.http.HttpHeaders;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.File;@RestController@RequestMapping("/files")publicclassFileDownloadController{privatestaticfinalStringUPLOAD_DIR="uploads/";@GetMapping("/download/{filename:.+}")publicResponseEntity<Resource>downloadFile(@PathVariableString filename){File file =newFile(UPLOAD_DIR+ filename);if(!file.exists()){returnResponseEntity.status(HttpStatus.NOT_FOUND).body(null);}Resource resource =newFileSystemResource(file);returnResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,"attachment; filename=\""+ filename +"\"").body(resource);}}
  1. FileDownloadController

提供了一个

  1. downloadFile

方法,允许用户通过指定文件名下载文件。

3. 删除文件

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

  1. packagecn.juwatech.fileupload;importorg.springframework.web.bind.annotation.DeleteMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.File;@RestController@RequestMapping("/files")publicclassFileDeleteController{privatestaticfinalStringUPLOAD_DIR="uploads/";@DeleteMapping("/delete/{filename:.+}")publicStringdeleteFile(@PathVariableString filename){File file =newFile(UPLOAD_DIR+ filename);if(file.delete()){return"File deleted successfully";}else{return"File not found or delete failed";}}}
  1. FileDeleteController

提供了一个

  1. deleteFile

方法,允许用户删除指定的文件。

前端页面(可选)

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

  1. <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>File Upload</title></head><body><h1>File Upload</h1><formaction="/files/upload"method="post"enctype="multipart/form-data"><inputtype="file"name="file"/><buttontype="submit">Upload</button></form></body></html>

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

总结

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

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

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/weixin_44627014/article/details/140572670
版权归原作者 省赚客APP开发者@聚娃科技 所有, 如有侵权,请联系我们删除。

“在Spring Boot中实现文件上传与管理”的评论:

还没有评论