请问访问量很小的个人博客,用什么来存储图片?

论坛 期权论坛 股票     
期权匿名问答   2023-2-2 00:16   10864   5
想用oss和cdn,但是感觉费用较多,而且要考虑的东西也多了些,没什么意义,请问有什么替代方案吗,还是直接用oss和cdn比较好
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2023-2-2 00:16:22 发帖IP地址来自 北京邮电大学
各大云厂商的对象存储就可以了吧,我用七牛云的感觉还可以。但是七牛云给的域名是临时的,过期就不行了,要自己买个域名,所以要花个域名的钱。
3#
期权匿名回答  16级独孤 | 2023-2-2 00:16:45 发帖IP地址来自 中国
要我就AWS S3 hosting
4#
期权匿名回答  16级独孤 | 2023-2-2 00:17:23 发帖IP地址来自 中国
分情况考虑啊,文件系统能实现的话可以直接用文件系统,使用数据库也是一种可行的方式。但多次复用的图片最好存放在cdn上。
方案一:直接存储图片

这个思路其实很简单,html中的图片只是需要一个url,那我只要把图片存放在服务器的硬盘上(也就是存放在文件夹中),然后url就可以在html中使用了。
这种方法相信学过web开发的都有所了解,毕竟静态页面开发的时候图片就是存放在文件夹里的,现在的操作与当时是一样的,PHP等后端语言也支持上传图片到指定文件夹的功能。
不过这种方案有一个弊端,就是服务器的空间是比较小且有限的,少量的文件可以用这种方式,但图片量多的时候空间会成为掣肘。
不过也有解决方法,现在有很多云,比如腾讯云,阿里云,七牛云等,都可以把图片存上去,然后就可以用url的方式来访问这个图片了。
我们自己站其实也可以说是一种特殊的博客,反正就是一种文章系统,访问量也不算小。
我站的文章图片存放都是这样的存放地址:


这其实是一个七牛云的空间,说白了也是一个文件系统。
方案二:图片转码后存放在数据库内

这种方案廖雪峰老师的回答中有提到,之前我们学习springboot的时候也使用java实现过,其实就是把图片转换为base64编码存放在数据库中(数据库是不能直接存储图片的,只能存储图片的数据格式)
小结

其实两个方案各有优缺
方案二的优点是:图片存放在数据库中统一管理,不需要外部的支持,一个服务器就能解决,如果是个人博客的话,也就是省去了再买oss或者cdn的钱,但是缺点也比较明显,图片的获取需要读数据库,压力给到了数据库,base64编码需要转成图片,服务器也要承担一定的压力,所以如果是文章内的图片,或者头像这种,图片出现次数比较少的情况,使用方案二是可以的,但是如果是页面logo这种,使用方案二是比较浪费资源的。
方案一的优点是图片存取逻辑简单,不需要转码不会给服务器带来太多压力,但是需要对文件系统做好设计,不然管理起来会是噩梦,不过这也很好解决。
方案一如果是把图片存放在云服务器中还有减轻主服务器的压力的功效!
一般来说这些都是可以搭配使用的,也需要按自己的情况来具体分析,如果是题主描述的小流量的博客,其实不采用oss/cdn的方案一也可以,使用数据库管理的方案二也可以,把方案一和二合在一起使用,高频使用的图片使用方案一,低频使用的图片使用方案二也可以。
我们是W3Cschool编程狮,致力于帮助初学者入门及提升程序员开发效率,学编程,从这里开始!
关注公众号「W3Cschool」与「w3cschool编程狮」,可获得10G+新手编程学习资料包!
点击https://w3cschool.cn,浏览1000+免费编程教程及文档。
5#
期权匿名回答  16级独孤 | 2023-2-2 00:18:00 发帖IP地址来自 四川成都
实在不明白某些说把图片存数据库blob,前置Nginx+CDN的是什么神奇的思路,既然都上CDN了,你还存个什么blob,直接把图片扔Nginx里不完了么,
做过一个正儿八经的项目么,简直不知所云。
6#
期权匿名回答  16级独孤 | 2023-2-2 00:18:39 发帖IP地址来自 北京
数据库直接存blob,备份的时候备份数据库就备份了所有数据。
前面挂nginx加上proxy_cache设置,再加cdn,基本上数据库里的图片只会访问1-2次,99%的压力在CDN,1%的压力在nginx访问缓存的静态图片。
当然要设计缓存友好,存进去就不可变。
https://github.com/michaelliao/itranswarp优点:只备份数据库,备份方便,运维简单,无额外代码。
缺点:不适合上G/上T的图片。
无论存本地文件、存S3/OSS,还是存免费图床/GitHub,都需要额外开发。免费服务一停,就得迁移,非常麻烦。
本回答仅针对只用数据库的个人博客,静态网站不在讨论范围内,大项目请自觉花钱买存储找运维。
方案永远是需求+成本+收益的衡量,不要觉得存数据库是什么低端方案。要真是钱多、图多、流量Top10,那我建议自建CDN。
附:
存数据库,假设指定访问路径是/file/<id>:
本地服务器负责处理/file/<id>,直接读数据库返回图片内容,文件类型也从数据库读取;
Nginx负责缓存:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=1y use_temp_path=off;

location ~ /file/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_cache my_cache;
    proxy_cache_key "$uri";
}后端控制Cache-Control时长直接缓存1年,基本上所有图片除了第一次访问后续根本不会读数据库。不想在后端控制缓存也可以在Nginx设置Cache-Control,更灵活。
缩略图也可以后端实时生成,因为有缓存,只会生成一次,后续都是Nginx抗压力。
挂不挂CDN,取决于出口带宽。
再次强调,此方案针对少量小图片,备份和迁移方便,开发非常简单。如果存本地文件,你的备份要两步;如果存OSS,迁移其他云工作量大,且缩略图要提前生成备好。
不接受反驳,反驳就是你对。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP