11.1.5 实现文件删除,共享和共享下载排行榜

1、图床分享图片api_sharepicture.cc

sharepicture_cgi.c 分享后每个人都可以看到。
数据库:

DROP TABLE IF EXISTS `share_picture_list`;
CREATE TABLE `share_picture_list` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',`user` varchar(32) NOT NULL COMMENT '文件所属用户',`filemd5` varchar(256) NOT NULL COMMENT '文件md5',`file_name` varchar(128) DEFAULT NULL COMMENT '文件名字',`urlmd5` varchar(256) NOT NULL COMMENT '图床urlmd5',`key` varchar(8) NOT NULL COMMENT '提取码',`pv` int(11) DEFAULT '1' COMMENT '文件下载量,默认值为1,下载一次加1',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件创建时间',PRIMARY KEY (`id`),KEY `idx_user_filemd5` (`user`, `filemd5`),KEY `idx_urlmd5_user` (`urlmd5`, `user`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='图床文件列表';

2、分享/删除文件,更新下载计数api_dealfile.cc

2.1 /api/dealfile?cmd=share分享文件

数据库表单

DROP TABLE IF EXISTS `user_file_list`;
CREATE TABLE `user_file_list` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',`user` varchar(32) NOT NULL COMMENT '文件所属用户',`md5` varchar(256) NOT NULL COMMENT '文件md5',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件创建时间',`file_name` varchar(128) DEFAULT NULL COMMENT '文件名字',`shared_status` int(11) DEFAULT NULL COMMENT '共享状态, 0为没有共享, 1为共享',`pv` int(11) DEFAULT NULL COMMENT '文件下载量,默认值为0,下载一次加1',PRIMARY KEY (`id`),KEY `idx_user_md5_file_name` (`user`,`md5`, `file_name`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COMMENT='用户文件列表';DROP TABLE IF EXISTS `file_info`;
CREATE TABLE `file_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件序号,自动递增,主键',`md5` varchar(256) NOT NULL COMMENT '文件md5',`file_id` varchar(256) NOT NULL COMMENT '文件id:/group1/M00/00/00/xxx.png',`url` varchar(512) NOT NULL COMMENT '文件url 192.168.52.139:80/group1/M00/00/00/xxx.png',`size` bigint(20) DEFAULT '0' COMMENT '文件大小, 以字节为单位',`type` varchar(32) DEFAULT '' COMMENT '文件类型: png, zip, mp4……',`count` int(11) DEFAULT '0' COMMENT '文件引用计数,默认为1。每增加一个用户拥有此文件,此计数器+1',PRIMARY KEY (`id`), -- UNIQUE KEY `uq_md5` (`md5)KEY `uq_md5` (`md5`(8)) -- 前缀索引
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8 COMMENT='文件信息表';DROP TABLE IF EXISTS `share_file_list`;
CREATE TABLE `share_file_list` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',`user` varchar(32) NOT NULL COMMENT '文件所属用户',`md5` varchar(256) NOT NULL COMMENT '文件md5',`file_name` varchar(128) DEFAULT NULL COMMENT '文件名字',`pv` int(11) DEFAULT '1' COMMENT '文件下载量,默认值为1,下载一次加1',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件共享时间',PRIMARY KEY (`id`),key `idx_filename_md5_user` (`file_name`, `md5`, `user`),key `idx_md5_user` (`md5`, `user`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='共享文件列表';

2.1.1请求和应答

请求URL

URLhttp://192.168.1.4/api/dealfile?cmd=share
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
token令牌同上必填
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

3: 别人已经分享此文件

4: token验证失败

2.2 /api/dealfile?cmd=del删除文件

2.2.1 请求和应答

请求URL

URLhttp://192.168.1.4/api/dealfile?cmd=del
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
token令牌同上必填
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

2.3 /api/dealfile?cmd=pv更新文件下载计数

2.3.1 请求和应答

是用来更新指定文件的下载量,每次成功下载一个文件成功后,调用该接口更新对应文件的pv值。

请求URL

URLhttp://192.168.1.4/api/dealfile?cmd=pv
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
token令牌同上必填
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

3 获取共享文件或下载榜api_sharefiles.cc

3.1/api/sharefiles?cmd=count获取共享文件数量

3.1.1 请求和应答

请求URL

URLhttp://192.168.1.4/api/sharefiles?cmd=count
请求方式GET
HTTP版本1.1
Content-Typeapplication/x-www-form-urlencoded

请求参数:无

公共的请求,这里暂时不做token验证,其实也可以做token校验,但目前前端已经写成不带token了。

返回结果参数说明

名称含义规则说明
code结果码

0:正常;

1:失败

total总数量

3.2 /api/sharefiles?cmd=normal获取共享文件列表

3.2.1 请求和应答

请求URL

URLhttp://192.168.1.4/api/sharefiles?cmd=normal
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
count数量必填
start开始位置必填

返回结果参数说明

名称含义规则说明
files文件结果集

"code":0:正常;1:失败

"count": 2, // 分页返回数量,如果为0则不需要解析files

"total": 2, 总的文件数量

"user": 用户名称,

"md5": md5值,

"create_time": 创建时间,

"file_name": 文件名,

"share_status": 共享状态, 0为没有共享, 1为共享

"pv": 文件下载量,下载一次加1

"url": URL,

"size": 文件大小,

"type": 文件类型

4 取消分享/转存/更新下载计数api_dealfile.cc

4.1 api/dealsharefile?cmd=cancel取消分享

4.1.1请求和应答

请求URL

URLhttp://192.168.1.4/api/dealsharefile?cmd=cancel
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

4.2 /api/dealsharefile?cmd=save转存文件

4.2.1请求和应答

请求URL

URLhttp://192.168.1.4/api/dealsharefile?cmd=save
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

5:文件已存在

4.3 /api/dealsharefile?cmd=pv更新共享文件下载计数

4.3.1请求和应答

即是共享文件下载成功后,发该url的请求,该文件下次数量+1.

请求URL

URLhttp://192.168.1.4/api/dealsharefile?cmd=pv
请求方式POST
HTTP版本1.1
Content-Typeapplication/json

请求参数

参数名含义规则说明是否必须缺省值
user用户名称不能超过32个字符必填
md5md5值md5加密后的值必填
filename文件名称不能超过128个字符必填

返回结果参数说明

名称含义规则说明
code结果值

0: 成功

1: 失败

参考链接:0voice · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95208.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java后端】SpringBoot配置多个环境(开发、测试、生产)

在 Spring Boot 中配置多个环境(开发、测试、生产)通常用 配置文件分环境管理 启动参数切换 的方式来实现。下面一个完整的实践指南:🔹 1. 使用多配置文件管理环境 Spring Boot 默认支持 application-{profile}.properties 或 ap…

HTTP 分块传输编码:深度解析与报文精髓

分块传输编码(Chunked Transfer Encoding)是 HTTP/1.1 协议中的一项核心特性,它允许服务器在不预先知道响应体总大小的情况下,高效地传输数据。这项技术解决了传统 Content-Length 机制的局限性,使得 HTTP 协议能够完美…

Vue 项目首屏加载速度优化

Vue 项目首屏加载从 5s 到 1.5s:4 步落地优化方案,附完整代码 数据对比前段时间我在做一个活动时,打包加载后发现打开页面要等半天,经过几天的优化,最终将首屏加载时间从5秒压到 1.5 秒。这篇文章会把整个优化过程拆解…

Java学习第十六部分——JUnit框架

目录 一.概述 二.作用 三.版本 四.优势 五.局限性 六.发展方向 七.核心组件 1 测试用例 2.断言(Assertions) 3.测试生命周期 4.测试运行器 八.简单示例 九.JUnit 4 与 JUnit 5 的区别 十.idea项目实战 1.在idea中创建Java项目&#xff0c…

[吾爱原创] 千千每日计划

[吾爱原创] 千千每日计划 链接:https://pan.xunlei.com/s/VOYuE8p-KIV-NJr2_0d1Ak9YA1?pwdbqez# 介绍:千千系列的最后一款软件,一款每日计划的一款软件,并且支持时间段修改和打卡和导入导出等功能。 功能: 1.设置每天的计划 2…

docker命令(二)

目录 docker命令 1.inspect命令(查看镜像信息) 2.tag命令(为镜像起别名) 3.--help命令(查看命令的使用帮组) docker 命令 --help docker --help 4.run命令 1.格式 2.启动tomcat镜像 3. docker 不能被外部访…

Dockerfile实现java容器构建及项目重启(公网和内网)

公网情况0.Dockerfile关键字关键字作用一句话出现位置FROM指定基础镜像(任何 Dockerfile 必须且首行)全局RUN在镜像构建阶段执行命令(常用来安装软件)构建期COPY把宿主机文件/目录复制进镜像构建期ADD类似 COPY,但额外…

SpringCloud与Dubbo深度对比:架构、性能与生态全解析

引言在微服务架构盛行的今天,服务治理框架的选择成为企业技术栈决策的关键环节。Spring Cloud和Dubbo作为Java生态中最具代表性的两大微服务框架,各自拥有独特的优势和适用场景。本文将从架构设计、服务治理、性能表现、生态系统等多个维度进行深度对比&…

简历书写---自我评价怎么写

前言 今天一对一辅导了很多同学做简历,看到很多同学简历上都有一栏:自我评价 那我们就要思考一下,我们搞技术的,一份技术简历,自我评价上怎么写,才能算一个加分点呢? 观点分享 首先,…

嵌入式Linux学习 - 数据库开发

目录 一. 在终端的使用 1. 下载 2. 操作 3. 相关函数 1.增 2. 删 3. 改 4. 查 5. 补充函数 二. 在软件的使用 1. 下载 2. 操作 三. 在编程的使用 1. 下载 2. 相关函数 1. 打开 2. 读写执行sql语句 3. 关闭 一. 在终端的使用 1. 下载 sudo apt-get install …

产品运营必备的职场通用能力有哪些?如何一步步提升?

在流量红利消退的存量竞争时代,产品运营岗位正经历价值重构。单纯的活动策划与用户维护已无法满足发展需求,数据驱动的精细化运营成为行业分水岭。面对这场变革,复合能力建设与前瞻工具掌握是运营人突破天花板的密钥。推荐考取CDA数据分析师&…

ESPTimer vs GPTimer:ESP32 定时器系统深度解析

第十五章和第十六章分别学习了​​ESPTimer​​ 和 ​​GPTimer​​ ,那这两种定时器有什么区别,如何使用呢,下面探讨下。1. 两种定时器对比介绍1.1 两种定时器设计在 ESP32 开发中,​​ESPTimer​​ 和 ​​GPTimer​​ 是两种完…

【70页PPT】WMS助力企业数字化转型(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91806268 资料解读:【70页PPT】WMS助力企业数字化转型 详细资料请看本解读文章的最后内容。仓储管理在企业运营中占据关键地位&a…

[光学原理与应用-337]:ZEMAX - 自带的用于学习的样例设计

ZEMAX(OpticStudio)内置了大量样例设计文件,这些文件覆盖了从基础光学原理到复杂系统设计的全场景,是学习光学设计、掌握软件操作、理解像差理论的绝佳资源。以下是ZEMAX自带样例设计的详细分类、使用方法及学习价值分析&#xff…

下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!

文章标题(可选,均包含核心关键词) 【主推标题】 #AI编程制作小游戏 的终极 #变现 指南:如何通过 #看广告变现 轻松赚钱 【疑问式标题】 #AI制作小游戏 真的能赚钱吗?揭秘 #AI编程赚钱 的四大核心路径与广告变现策略 【趋势型标题】 下一波红利:用 #AI编程 闯入小游戏赛道…

【git】add后不想commit怎么实现pull

本地有改动已 git add 到暂存区(stage),但是还没 commit,同时远端有 28 个新提交需要拉取。 直接 git pull 会冲突或被拒绝,因为你本地有 staged 修改。 处理步骤有几种方案,我给你推荐最稳妥的几种:✅ 方法 1&#xf…

Unable to establish SSL connection. curl静态编译

博主有个老RHEL系统,内核2.6.18;ssl不管用了,最简单的wget也不行,下面编个静态编译的新版 curl 用用(不影响yum源,不然的话系统自带的旧版 OpenSSL 受影响得得不偿失),来最优化解决下…

Redis-08 SpringBoot集成Redis常见问题

SpringBoot集成Redis的教程网上很多,总体来说就是三个步骤:添加依赖、修改配置文件、自定义Redis配置类(自定义序列化器),具体步骤可自行搜索,本文主要解惑集成中的常见疑问。 1,选择什么依赖&…

数据结构:选择排序 (Selection Sort)

目录 从学生排队开始 算法的初始状态和核心操作 代码的逐步完善 第一阶段:定义函数框架和外层循环 第二阶段:实现“寻找最小元素”的逻辑(内层循环) 第三阶段:完成“交换”操作 复杂度与特性分析 时间复杂度 (…

Django Admin 管理工具

一、简介Django Admin 是 Django 框架最受欢迎和强大的特性之一。它是一个自动生成的管理后台,允许开发者无需或仅需编写少量代码,就能对网站的数据模型(数据库中的表)进行直观的增、删、改、查(CRUD)操作。…