Cloudimage

基于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.对于小图片的存储问题没有进行处理,对存储空间有一定的浪费

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值