SpringBoot 接口怎么传数据库中的 BLOB 图片给前端

2020-09-25 09:18:08 +08:00
 sandman511

单张或者多张的 求大佬讲个方案 现在是能传 但想要个最佳方案。。虽然数据库存图片就离谱。。。。

3680 次点击
所在节点    程序员
26 条回复
RedBeanIce
2020-09-25 09:20:42 +08:00
都 springboot 了,数据库还存图片的二进制吗?
myCupOfTea
2020-09-25 09:22:56 +08:00
数据库存图片确实离谱
muskill
2020-09-25 09:22:59 +08:00
存 base64 呢
lower
2020-09-25 09:27:28 +08:00
现在的方案是什么样的呢?
napsterwu
2020-09-25 09:27:49 +08:00
blob 直接当成文件下载送出去,前端直接用 img src 拿
monkeyWie
2020-09-25 09:28:00 +08:00
提供一个接口,然后以字节流的方式写出图片不就行了吗,注意设置好正确的 Content-Type 就行
yazinnnn
2020-09-25 09:44:40 +08:00
说实话,数据库存图片挺扯淡的
fhsan
2020-09-25 09:49:35 +08:00
http body stream
charten
2020-09-25 09:56:19 +08:00
我从前端的角度谈一下,我们这边请求 blob 实际上就是请求二进制流,跟普通的请求没什么区别。你只要把图片的二进制数据放进 body 就可以了。另外,如果有请求多张的情况,可以跟前端约定好一个二进制格式,比如以某个字符,比如 0x3b 之类的作为文件的开头,后面加 4 个字节用于表示图片的二进制长度:
0x3b 0x00 0x00 0x11 0xff <图片数据....4607 个字节>
0x3b 0x00 0x00 0x22 0xff <图片数据...8959 个字节>
...
securityCoding
2020-09-25 10:02:57 +08:00
不要在错误的路上越走越远 , 掉头吧
wysnylc
2020-09-25 10:16:40 +08:00
调头,OSS
justlikemaki
2020-09-25 10:34:31 +08:00
敏感图片你们也存 oss ?
crclz
2020-09-25 10:54:05 +08:00
@GetMapping("{id}")
public ResponseEntity<byte[]> getFile(@PathVariable long id) {
var blob = blobRepository.findById(id).orElse(null);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_JPEG)
.body(blob.getData());
}
spacebound
2020-09-25 11:19:15 +08:00
@monkeyWie +1,前端直接不用处理,调接口就行了
0x666666
2020-09-25 11:28:03 +08:00
都 0202 年了,微服务都用上了,数据库还存图片?
tanranran
2020-09-25 11:28:44 +08:00
base64
radiocontroller
2020-09-25 11:30:32 +08:00
专业的事交给专业的服务
zliea
2020-09-25 11:32:45 +08:00
InputStreamResource resource = new InputStreamResource(gridFSDBFile.getInputStream(),
gridFSDBFile.getFilename());

return (ResponseEntity<Resource>) ResponseEntity
.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + gridFSDBFile.getFilename() + "\"")
.contentLength(gridFSDBFile.getLength())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
zliea
2020-09-25 11:33:37 +08:00
如果是 byte[], 可以使用 ByteArrayResource
zjsxwc
2020-09-25 11:46:19 +08:00
还不如图片加密后文件保存本地,mysql 存图片解密密码,需要的时候通过密码和加密后的文件得到原图返回给客户端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/710288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX