spring boot 图片上传与显示功能实例详解

spring boot 图片上传与显示功能实例详解

一、环境搭建

  1. 创建Spring Boot项目
  2. 可以使用Spring Initializr(https://start.spring.io/)来创建一个基本的Spring Boot项目。选择合适的项目元数据,如项目名称、包名、依赖等。至少要添加Spring Web依赖以便处理HTTP请求。
  3. 项目结构
  4. 一个典型的Spring Boot项目结构如下:
    • src/main/java:包含Java源代码。
    • src/main/resources:存放配置文件(如application.propertiesapplication.yml)、静态资源(如HTML、CSS、JavaScript文件等)。在这个例子中,我们将上传的图片存储在项目的特定目录下,可以是src/main/resources/static/images(假设我们想通过浏览器直接访问图片时的一种存放方式)。

二、图片上传功能实现

  1. 创建文件上传的控制器类
  2. src/main/java下创建一个controller包,在其中创建FileUploadController类。
  3. 示例代码如下: ```java import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;

import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;

@RestController public class FileUploadController {

private static String UPLOADED_FOLDER = "src/main/resources/static/images/";

@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        return new ResponseEntity<>("Please select a file to upload", HttpStatus.OK);
    }

    try {
        byte bytes = file.getBytes();
        Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
        Files.write(path, bytes);
        return new ResponseEntity<>("File uploaded successfully", HttpStatus.OK);
    } catch (IOException e) {
        e.printStackTrace();
        return new ResponseEntity<>("Error uploading file", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

} `` - 上述代码中,@RestController注解表示这是一个处理HTTP请求并返回JSON等数据的控制器类。@PostMapping("/upload")指定了处理POST请求到/upload路径的方法。@RequestParam("file")用于接收名为file的文件参数,这里是一个MultipartFile类型,表示上传的文件。 - 在方法内部,首先检查文件是否为空,如果为空则返回相应提示。然后将文件字节写入到指定的路径下(这里是src/main/resources/static/images/目录下,文件名为原始文件名)。如果写入过程中出现IOException`,则返回错误信息。

  1. 配置文件上传大小限制(可选)
  2. application.properties(或application.yml)中可以配置文件上传大小限制。
  3. 对于application.propertiesproperties spring.servlet.multipart.max - file - size = 10MB spring.servlet.multipart.max - request - size = 10MB
  4. 这表示单个文件上传最大为10MB,整个请求的文件上传总量最大也为10MB。

三、图片显示功能实现

  1. 直接通过静态资源访问(假设图片存储在src/main/resources/static/images
  2. 如果图片存储在src/main/resources/static/images目录下,在Spring Boot中,默认情况下,这个目录下的静态资源是可以直接通过浏览器访问的。例如,如果上传了一个名为test.jpg的图片,那么可以通过http://localhost:8080/images/test.jpg(假设Spring Boot应用运行在http://localhost:8080)来访问这个图片。
  3. 返回图片的字节流(另一种方式)
  4. 可以创建一个控制器方法来返回图片的字节流,这在一些场景下是很有用的,比如需要对图片访问进行权限控制等情况。
  5. FileUploadController类中添加如下方法: java @GetMapping("/images/{filename}") public ResponseEntity<byte> getImage(@PathVariable("filename") String filename) { try { File file = new File(UPLOADED_FOLDER + filename); byte image = Files.readAllBytes(file.toPath()); return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(image); } catch (IOException e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } }
  6. 上述代码中,@GetMapping("/images/{filename}")用于处理GET请求到/images/{filename}路径的情况,其中{filename}是一个路径变量,表示要获取的图片文件名。在方法内部,首先根据文件名构建File对象,然后读取文件的字节流,返回一个ResponseEntity,设置了ContentTypeIMAGE_JPEG(如果是其他类型图片,需要相应修改),并将字节流放在body中。如果出现IOException,则返回500内部服务器错误状态的ResponseEntity
本篇文章所含信息均从网络公开资源搜集整理,旨在为读者提供参考。尽管我们在编辑过程中力求信息的准确性和完整性,但无法对所有内容的时效性、真实性及全面性做出绝对保证。读者在阅读和使用这些信息时,应自行评估其适用性,并承担可能由此产生的风险。本网站/作者不对因信息使用不当或误解而造成的任何损失或损害承担责任。
阅读全文