共计 2174 个字符,预计需要花费 6 分钟才能阅读完成。
最近要实现一个公布博客性能,波及到博文中图片的保留与拜访了,在博文中图片对应:

。由用户上传图片,咱们将其保留在 mongodb 数据库中,返回图片的 url 即可显示图片了。
在这里把根本实现步骤整顿了一下记录下来
增加 MongoDB 依赖并配置
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-mongodb</artifactId> | |
</dependency> |
spring: | |
data: | |
mongodb: | |
uri: mongodb://192.168.56.101:27017/sysblog |
建设图片实体
import org.bson.types.Binary; | |
@Document | |
public class UploadFile { | |
@Id | |
private String id; | |
private String name; // 文件名 | |
private Date createdTime; // 上传工夫 | |
private Binary content; // 文件内容 | |
private String contentType; // 文件类型 | |
private long size; // 文件大小 | |
// getter/setter | |
} |
- 此处 id 的类型要设置为 String,MongoDB 会主动调配 id,设置为数值型会报错。
-
BSON 是一个二进制序列化格局,在 MongoDB 外面被用来做文档存储和近程程序调用,咱们应用 org.bson.types.Binary 类来封装文件内容。
new Binary(byte[] byte)
上传图片
此处仅演示性能,便不分层等操作。
上传图片后,保留至 mongodb 数据库,并返回图片的拜访 url
@Autowired | |
private MongoTemplate mongoTemplate; | |
@PostMapping("/file/uploadImage") | |
@ResponseBody | |
public String uploadImage(@RequestParam(value = "image") MultipartFile file){if(file.isEmpty()) | |
return JSONResult.build(200, "请抉择一张图片", null); | |
// 返回的 JSON 对象,这品种可本人封装 | |
JSONResult jsonResult = null; | |
String fileName = file.getOriginalFilename(); | |
try {UploadFile uploadFile = new UploadFile(); | |
uploadFile.setName(fileName); | |
uploadFile.setCreatedTime(new Date()); | |
uploadFile.setContent(new Binary(file.getBytes())); | |
uploadFile.setContentType(file.getContentType()); | |
uploadFile.setSize(file.getSize()); | |
UploadFile savedFile = mongoTemplate.save(uploadFile); | |
String url = "http://localhost:8080/file/image/"+ savedFile.getId(); | |
jsonResult = JSONResult.build(200, "图片上传胜利", url); | |
} catch (IOException e) {e.printStackTrace(); | |
jsonResult = JSONResult.build(500, "图片上传失败", null); | |
} | |
return jsonResult; | |
} |
-
MongoTemplate:操作 MongoDB 的类,例如增删改查等。
你也能够创立一个 repository 层接口继承 MongoRepository,相似于 JPA 的操作。
-
JSONResult:本人封装的返回 JSON 数据的工具类:
JSONResult(状态码, 信息, 数据);
- String url:咱们获取保留到数据库中的图片 id,封装成拜访图片的地址,其实也是一个申请,上面咱们实现这个申请。
获取图片
依据图片 id 获取图片
import org.springframework.http.MediaType; | |
@GetMapping(value = "/file/image/{id}", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE}) | |
@ResponseBody | |
public byte[] image(@PathVariable String id){byte[] data = null; | |
UploadFile file = mongoTemplate.findImageById(id, UploadFile.class); | |
if(file != null){data = file.getContent().getData();} | |
return data; | |
} |
- produces:示意返回给前端的类型,比方文本、GIF、PDF 等等,这里咱们当然返回图片了。
后果
在 markdown 编辑器中插入图片,几乎完满:
正文完
发表至: springboot
2020-07-16