客户要求把用户上传的 8~9MB 照片全部 base64 保存进数据库防止被传马,API 直接返回 base64 ,给他解释 base64 会让图片变大他理解不了
1
rainboat 2022-04-15 21:10:15 +08:00
实践是检验真理的唯一标准,多找几张图转成 base64 编码试试
|
2
claneo 2022-04-15 21:11:54 +08:00
33%
|
3
gdfsjunjun 2022-04-15 21:13:27 +08:00
数据库存 base64?是个勇士
|
4
gdfsjunjun 2022-04-15 21:14:17 +08:00
自己搭建图床系统,数据库只存图片路径
|
5
yaoyao1128 2022-04-15 21:14:25 +08:00 via iPhone 1
36
This encoding causes an overhead of 33–36% (33% by the encoding itself; up to 3% more by the inserted line breaks). 来源 维基百科 Base64 但是 gzip 可以解决一部分 |
6
chendy 2022-04-15 21:17:46 +08:00
数据库存 blob 呗,base64 何必呢
|
7
jinliming2 2022-04-15 21:26:14 +08:00 1
@yaoyao1128 通常不做展示的话,不会插换行符的,所以就是 33%
|
8
aptx4689 2022-04-15 21:47:54 +08:00 2
你可以给他演示一下用 base64 存数据库也能挂马
|
9
crab 2022-04-15 21:57:03 +08:00
4/3
|
10
yuzo555 2022-04-15 22:04:09 +08:00 2
三个字节的原文会变成 4 个字节的 Base64 编码。
|
11
Tink 2022-04-15 22:19:40 +08:00 via Android
数据库字段得多长.
|
12
FreeEx 2022-04-15 22:21:52 +08:00 via iPhone
minIO 不好用吗
|
13
xianrenT 2022-04-15 22:25:52 +08:00
@gdfsjunjun 为啥是个勇士,除了占用空间还有什么坏处吗?
|
15
vvhhaaattt 2022-04-15 23:06:47 +08:00 via Android
我记得谷歌相册 web 就是将图片 base64 编码后上传?
|
16
vvhhaaattt 2022-04-15 23:14:35 +08:00 via Android
@vvhhaaattt 搜索了下没有相关文档。但我记得是哪个服务上传图片的接口要用 base64 编码,文档中还提到图片大小跟占用宽带不一致,服务端限制的图片大小而不是宽带大小。
另外 base64 编码后比较方便放到 json 中,统一接口 content type 。 |
17
vvhhaaattt 2022-04-15 23:16:40 +08:00 via Android
😅没仔细看是入库编码啊……
|
18
xtinput 2022-04-15 23:22:49 +08:00
base64 的有效数据 75%,所以会增大 33.333%
|
19
kaiki 2022-04-15 23:25:53 +08:00
前端获取不到后端文件的路径的话,就算是木马也没法执行啊,原文件储存,中间用个图片解析程序中转下不就行了
|
20
mikewang 2022-04-16 00:16:05 +08:00 9
Base64 ,故名思义,64 进制( 2^6 ),一个字符表示 6 个比特数据
一个字符计算机储存为 8 个比特,多出来(8-6)/6 = 1/3 = 33.33% |
21
3dwelcome 2022-04-16 00:52:41 +08:00 1
说出来你们可能不信,base64 增大的那 33%,只要用目前较强力的压缩算法,比如 7z ,又可以把增大的部分给压回去。
所以 base64+7z, 可能最终对比原图 JPG 大小,也就大个 5%。 |
22
IvanLi127 2022-04-16 01:12:40 +08:00 via Android
还不趁机加价加工期
|
23
sneezry 2022-04-16 03:08:07 +08:00
这都是什么可爱客户
|
24
Quarter 2022-04-16 08:21:41 +08:00 via iPhone
mongo ?
|
25
play78 2022-04-16 08:40:44 +08:00
这种方式有个客户刚好用上,最后问,为什么每次请求都那么慢。
是因为普通的文件服务器,图片能在浏览器缓存,而数据库查询出来的图片,做缓存很麻烦,要写代码做。 |
26
gam2046 2022-04-16 09:47:30 +08:00 1
@3dwelcome #21 7z 以后还是 blob 数据,那么既然如此,为何还要走 base64 -> 7z 这条路,直接图片本身 blob 入库。最后结果是一样,而且这么兜了一圈以后,base64 浪费一遍 CPU 资源,zip/unzip 又费一次 CPU 。
|
27
cheng6563 2022-04-16 12:40:21 +08:00
存储体积会涨 36%,但是,内存占用可能会翻个好几倍
|
29
markgor 2022-04-16 13:13:25 +08:00
之前有遇到过一个搞.NET PC 端的,他们就是把图片传入 sqlserver 的,但没有 base64 ,直接传 blob 。
我觉得直接把图片传入数据库中好处是:不用理会路径。 坏处是:当 sqlserver 为远程时容易把 sqlserver 的带宽打满导致响应不了其他请求。 其实配置下静态目录和执行权限,安全系数不会比存数据库低吧,而且就算存数据库为什么要 base64 呢? |
30
markgor 2022-04-16 13:16:38 +08:00
话说这让我联想起 9 年前,和客户吃饭时客户专门带上懂电脑的朋友,试探性的问了我一句如果被 DDOS 了怎么办。
我那时候回复是只能硬抗,要么上设备清洗要么加大带宽。 然后他似笑非笑的说为什么不把 DNS 改为 127.0.0.1 当时我很无语,随后问他那拔网线不是更快...... |
32
aylmer 2022-04-16 14:48:30 +08:00
直接上 oss 就解决的事,为什么要弄得这么麻烦呢
|
33
en20 2022-04-16 15:02:45 +08:00
经典客户不懂装懂,你还是顺着他意思吧
|
34
wupher 2022-04-16 17:28:25 +08:00 1
他愿意为此掏钱就照做吧,不过建议明确注明此项技术方案是甲方要求,由此引发的相关问题不担责即可。
|
35
marcojbk 2022-04-16 22:02:41 +08:00 via iPhone
这不是好事吗,硬件要求又提高不少,买硬件的回扣你能多挣不少呢
|
36
caisanli 2022-04-17 08:41:46 +08:00 via iPhone
我以前搞过一次 做一个新闻页 需要上传图片 领导不给文件服务资源 我就把图片转 base64 存数据库🤣
|
37
mutalisk 2022-04-17 11:29:34 +08:00
@3dwelcome 压回去不又变成二进制流了么,很多都是不可见字符。本来做 base64 的目的不就是都是可见的字符么,便于 json 传输或者终端打印。既然要压,那干嘛不直接用原来的图片字节流呢。
|
39
shanyue 2022-04-17 20:17:08 +08:00 1
33%,可以根据这个工具 https://devtool.tech/base64 ,看一下编码的过程,为什么是 33% 一目了然。
|
40
debuggeeker 2022-04-18 09:33:16 +08:00
其实如果不是需要原图的话,可以保存 2 份,保存一次原图,制作一次采样图片,也保存到 oss 中,这种图片肯定不放数据库的,都是第三方储存桶。客户需要图片,就把图片地址丢给他,原图和采样都给,然他自己拿。采样工具可以 GitHub 看 Luban
|