Cloudimage
发布日期:2021-09-20 08:56:06 浏览次数:15 分类:技术文章

本文共 1348 字,大约阅读时间需要 4 分钟。

基于HTTP协议的图片处理服务器 Cloudimage

项目功能

  • 提供一个存储图片服务器,为图片提供一个唯一的url,用url可以将图片展示在其他网页上

项目思路

  • 使用MySQL数据库保存图片的各种信息,并对MySQL提供的接口进行封装
  • 采用md5算法对下载的图片进行校验,保证图片的完整性
  • 采用RESTful风格对HTTP协议进行设计
  • 使用使用JSON数据交换格式组织请求信息与响应信息

使用步骤

1.向服务器上传图片

首先向服务器请求上传图片的html网页,从该网页向服务器上传图片

47.98.98.123/upload.html
选择文件进行上传
在这里插入图片描述

2.获取图片信息

通过get方法使用图片id/image目录下获取图片信息

响应消息以JSON格式进行返回,返回图片的名称,大小,以及各式等信息
在这里插入图片描述

3.获取服务器中的图片内容

使用Get方法加上/show的后缀以及图片的id,可以完整的将图片显示在网页上

在这里插入图片描述

4.图片的删除

使用postman工具构造Delete方法进行删除,根据/image后缀以及图片的id进行删除,删除数据库中图片的信息以及服务器上图片的内容,删除成功返回true

在这里插入图片描述

读写实现

将图片内容存储在服务器的磁盘中

bool Write(const std::string& file_name,const std::string& content){
std::ofstream file(file_name.c_str()); if (!file.is_open()) {
return false; } file.write(content.c_str(), content.length()); file.close(); return true;}

获取图片的存储位置,并且拿到请求报文中的body字段,将body字段内容写入磁盘进行存储

从服务器磁盘读取图片内容通过响应报文返回给客户端

bool Read(const std::string& file_name, std::string* content) {
std::ifstream file(file_name.c_str()); if (!file.is_open()) {
return false; } struct stat st; stat(file_name.c_str(), &st); content->resize(st.st_size); file.read((char*)content->c_str(), content->size()); file.close(); return true; }

通过操作系统提供的stat进行拿到指定目录文件的大小,通过大小将文件内容全部读取,再通过httplib提供的方法将内容返回给客户端

项目反思

1.对相同图片而名字不同的图片没有做特殊处理,会浪费一定的服务器磁盘空间

2.没有对url的使用做权限设置,其他人拿到url便可以直接访问图片
3.对于小图片的存储问题没有进行处理,对存储空间有一定的浪费

转载地址:https://blog.csdn.net/a_hang_szz/article/details/100186633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:二叉树的重建
下一篇:红黑树的创建

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月10日 19时27分06秒