【HTTP图片服务器】【项目记录7】:总结

一、本项目涉及的所有知识点

1. 简单的Web服务器设计能力
2. C/C++ 操作 MySQL 数据库
3. 数据库设计
4. Restful 风格 API
5. json 和 jsoncpp 的使用
6. 强化 HTTP 协议的理解
7. cpp-httplib 的使用和原理
8. 正则表达式
9. 基于 md5 进行校验
10. Postman 工具的使用
11. 软件测试的基本思想和方法

二、项目扩展点

1.存储时合并小文件

如果上传大量的比较小的文件时,在磁盘空间不太充裕时可能会产生磁盘碎片,把这些逻辑上比较小的文件合并成一个比较大的物理文件,在读取文件时,数据库中除了存该文件的路径之外,再存一个偏移量,在已知路径的相对偏移量开始读起,就可以正常读取文件。

2.防盗链

增加权限控制,只让图片能被特定的用户使用。
防盗链的方法:使用登录验证,判断引用地址,例如使用 cookie、POST 下载、图形验证码等方法。其中使用 cookie 是通过实现用户账户功能,登录之后就得到了 cookie,有了 cookie 就可以正常使用。
相关博客:https://www.cnblogs.com/wangyongsong/p/8204698.html

3.图片处理功能

比如缩略图功能,如果原图片比较大,相同带宽下缩略图加载更快。可以在用户请求时添加一个参数,比如width=100&length=120。以及一些其他图片处理功能。
借助 C++ 图片处理库:计算机视觉库 OpenCV ,开源图形库 FreeImage 等。

4.相同图片只保留一份

通过 md5 值判断文件内容是否相同,引用计数方式,调用时访问同一个文件,以节省服务器资源。删除时若计数大于1,则只将计数减1并删除图片信息,如果为1则同时删除该文件。

三、项目中遇到的问题及解决办法

1.Json::StyledWriter 被新函数替代
–>在文件顶端添加如下代码以继续使用该函数:

#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#elif defined(_MSC_VER)
#pragma warning(disable : 4996)
#endif

2.若要使用 file.offset、file.length,需要使用2017版 httplib.h

我的 Github 链接:
https://github.com/Dex5wu/Project-Image-Server/blob/master/httplib.h

3.第一次用浏览器向服务器发送请求时响应超时

推测是服务器防火墙没有关,关闭后果然可以正常访问了

防火墙相关指令:

//查看防火墙的状态(是否有开启)
systemctl status firewalld
service iptables status

//暂时关闭防火墙
systemctl stop firewalld
service iptables stop

//暂时关闭后,开启防火墙
systemctl start firewalld
service iptables start

//永久关闭防火墙(开机禁用)
systemctl disable firewalld
chkconfig iptables off

//重启防火墙
service iptables restart

//永久关闭后,开启防火墙(开机自动启用)
systemctl enable firewalld
chkconfig iptables on

4.使用了正则表达式后,发现代码运行总是报错 “已放弃(吐核)”

查询后发现是因为g++版本太低,不支持正则表达式
如何查看当前g++版本:g++ -v
将 g++ 升级到 8.3.1 之后就没问题了

四、项目成果使用方法

1.上传图片: http://47.106.245.188:9094/upload.html
2.查看所有图片信息: http://47.106.245.188:9094/image
3.查看指定图片信息: http://47.106.245.188:9094/image/1
4.查看指定图片内容: http://47.106.245.188:9094/show/1
5.删除指定图片: http://47.106.245.188:9094/image/1 (删除要在Postman上选DELETE)

服务器运行后,前4条链接可在任何客户端上使用,可以上传图片、查看图片信息、使用图片内容。因为删除较为麻烦,一定程度上避免了误删的情况。
还可以在 CSDN 写博客时使用服务器中的图片,使用方法为:

1.点击“图片”
在这里插入图片描述
2.选择链接添加
在这里插入图片描述
3.之后将相应的 URL 填入即可
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值