图文并茂:解析Spring Boot Controller返回图片的三种方式
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@RestController
public class ImageController {
// 方式一:直接返回图片资源
@GetMapping("/image1")
public Resource getImage1() throws IOException {
// 假设 imagePath 是图片文件的路径
return new InputStreamResource(new FileInputStream(imagePath));
}
// 方式二:返回图片的字节数组
@GetMapping("/image2")
public ResponseEntity<byte[]> getImage2() throws IOException {
// 假设 imagePath 是图片文件的路径
BufferedImage image = ImageIO.read(new File(imagePath));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "png", outputStream); // 假设是PNG格式
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(outputStream.toByteArray());
}
// 方式三:返回图片作为响应实体
@GetMapping("/image3")
public ResponseEntity<Resource> getImage3() throws IOException {
// 假设 imagePath 是图片文件的路径
Resource imageResource = new FileSystemResource(imagePath);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(imageResource);
}
}
这段代码展示了在Spring Boot Controller中返回图片的三种方式:
- 直接返回图片作为InputStreamResource。
- 返回图片的字节数组。
返回图片作为Resource嵌入到ResponseEntity中。
这些方法可以根据实际情况选择使用,例如,如果图片来自数据库,则可能更倾向于第二种方式;如果图片存储在文件系统中,则可能更倾向于第一或第三种方式。
评论已关闭