图片存储服务端

图片存储服务端

项目描述

实现一个HTTP服务器,使用这个服务器来存储图片,并且为每张图片提供唯一的URL,使用URL将图片展示到网页上面。

功能

1、上传图片
2、查看图片内容
3、查看每个图片属性
4、删除图片

项目模块划分

数据库存储模块

使用MySQL数据库进行存储。

MD5

MD5简介

MD5是一种字符串哈希算法,由于任意的字符串的MD5是固定长。
由字符串求MD5很简单,但是由MD5反向求字符串是一件很困难的事情。
只要字符串稍有变化,所求得的MD5值就有很大的区别。

MD5应用

1、用于密码管理;
2、垃圾邮箱的筛选;
3、电子签名;
4、用来校验文件内容的准确性。

259 std::string StringMD5(const std::string& str)
260 {
   
261     const int md5_length=16;
262     unsigned char MD5result[md5_length];
263     // 使用OpenSSL函数计算MD5
264       MD5((const unsigned char*)str.c_str(),str.size(),MD5result);
265     // 转换成字符串方便查看
266     char out[1024] = {
   0};
267     int off = 0;
268     for(int i = 0;i < md5_length; ++i)
269     {
   
270        off += sprintf(out + off,"%x",MD5result[i]);
271     }
272     return std::string(out);
273 }

数据库设计

创建一张表来存储信息:

CREATE TABLE `image_table` (
  `image_id` int(11) NOT NULL AUTO_INCREMENT,
  `image_name` varchar(256) DEFAULT NULL,
  `size` int(11) DEFAULT NULL,
  `upload_time` varchar(50) DEFAULT NULL,
  `type` varchar(128) DEFAULT NULL,
  `path` varchar(1024) DEFAULT NULL,
  `md5` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`image_id`)
);

在这里插入图片描述

对数据库初始化:

 11     static MYSQL *MySQLInit()
 12     {
   
 13         //使用mysql API来操作数据库
 14         //1、先创建一个mysql的句柄
 15         MYSQL* mysql = mysql_init(NULL);
 16         //2、使用句柄和数据库建立连接
 17         if (mysql_real_connect(mysql,"127.0.0.1","root","root","image_system",3306,NULL,0) == NULL)
 18         {
   
 19             //数据库连接失败
 20             printf("连接失败%s\n",mysql_error(mysql));
 21             return NULL;
 22         }
 23         //3、设置编码格式
 24         mysql_set_character_set(mysql,"utf8");
 25         return mysql;
 26     }
 27 
 28     static void MySQLRelease(MYSQL* mysql)
 29     {
   
 30         mysql_close(mysql);
 31     }

插入语句拼装:

 54			bool Insert(const Json::Value& image)
 55         {
   
 56             char sql[4 * 1024] = {
   0};
 57             sprintf(sql,"insert into image_table values(null,'%s',%d,'%s','%s','%s','%s')",
 58             image["image_name"].asCString(),
 59             image["size"].asInt(),image["upload_time"].asCString(),
 60             image["type"].asCString(),image["path"].asCString(),
 61             image["md5"].asCString());
 62             printf ("[Insert sql] %s\n",sql);
 63 
 64             int ret = mysql_query(_mysql,sql);
 65             if(ret != 0)
 66             {
   
 67                 printf ("Insert 执行SQL 失败! %s\n",mysql_error(_mysql));
 68                 return false;
 69             }
 70             return true;
 71 
 72         }

查询语句的拼装:

 74         bool SelectALL(Json::Value* images)
 75         {
   
 76             char sql[1024 * 4] = {
   0};
 77             sprintf(sql,"select * from image_table");
 78             int ret = mysql_query(_mysql,sql);
 79             if(ret != 0)
 80             {
   
 81                 printf("SelectALL 执行 SQL 失败!%s\n",mysql_error(_mysql));
 82                 return false;
 83             }
 84             //遍历结果集合,并把结果集写到image 参数中
85             MYSQL_RES* result = mysql_store_result(_mysql);
 86             int rows = mysql_num_rows(result);
 87             for(int i = 0; i < rows; ++i)
 88             {
   
 89                 MYSQL_ROW row = mysql_fetch_row(result);
 90                 //数据库查出的每条记录都相当于一个图片信息
 91                 //需要吧这个信息转成JSON格式
 92                 Json::Value image;
 93                 image["image_id"] = atoi(row[0]);
 94                 image["image_name"] = row[1];
 95     
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值