C++学习之云盘上传文件列表下载

1.上传打开文件操作

1. 注册
客户端
成功
{"code":"002"}
该用户已存在
{"code":"003"}
失败
{"code":"004"}
服务器
2. 登录
客户端
服务器
// url
http: //127.0.0.1:80/reg
// post 数据格式
{
userName:xxxx,
nickName:xxx,
firstPwd:xxx,
phone:xxx,
email:xxx
}
10
// url
http: //127.0.0.1:80/login
// post 数据
{
user:xxxx,
pwd:xxx
}
§ 成功:
{
"code" : "000" ,
"token" : "xxx"
}
§ 失败:
{
"code" : "001" ,
"token" : "faild"
}
10 3. 秒传
客户端
文件已存在 ( 秒传成功 )
{"code":"005"}
秒传成功:
{"code":"006"}
秒传失败:
{"code":"007"}
服务器
4. 上传
客户端
成功
{"code":"008"}
失败
{"code":"009"}

2.上传的http通信流程处理

获取用户文件个数
客户端
§ token 验证
® token 验证成功: { "token" : "110" }
® token 验证失败: { "token" : "111" }
11
12
13
14
# url
http: //127.0.0.1:80/md5
# post 数据格式
{
user:xxxx,
token:xxxx,
md5:xxx,
fileName: xxx
}
9
# url
http: //127.0.0.1:80/upload
# post 数据格式
------WebKitFormBoundary88asdgewtgewx\r\n
Content-Disposition: form-data; user="mike"; filename="xxx.jpg"; md5="xxxx";
size=10240
Content-Type: text/plain
真正的文件内容
------WebKitFormBoundary88asdgewtgewx--
8 url
http://127.0.0.1:80/myfiles?cmd=count
post 数据
{ "user": "kevin", "token": "xxxx" }
服务器 :
6. 从服务器获取文件信息
获取用户文件信息
http://127.0.0.1:80/myfiles&cmd=normal
按下载量升序
http://127.0.0.1:80/myfiles?cmd=pvasc
按下载量降序
http://127.0.0.1:80/myfiles?cmd=pvdesc
post 数据
{ "user": "yoyo" , "token": "xxxx", "start": 0, "count": 10 }
客户端
成功
文件列表 json
失败
{"code": "015"}
服务器
{
"num" : "270" ,
"code" : "110" // token 验证
}
{
"files" :
[
{
"user" : "yoyo" ,
"md5" : "e8ea6031b779ac26c319ddf949ad9d8d" ,
"time" : "2017-02-26 21:35:25" ,
"filename" : "test.mp4" ,
"share_status" : 0 ,
"pv" : 0 ,
"url" : "http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As
g3Z0782.mp4" ,
"size" : 27473666 ,
"type" : "mp4"
},
{
"user" : "yoyo" ,
"md5" : "e8ea6031b779ac26c319ddf949ad9d8d" ,
"time" : "2017-02-26 21:35:25" ,
"filename" : "test.mp4" ,
"share_status" : 0 ,
"pv" : 0 ,
20
21 2. Qt 中的多线程
QT 中的线程类 - QThread
1. 第一种使用方法
1. 创建一个自定义的线程类 , QThread 派生
2. 需要在自定义的类中重新实现 QThread 类的 run 函数
run 函数中的内容就是子线程的处理动作
子线程中不能操作 ui 对象 ( 控件对象 )
3. 创建一子线程对象
4. 使用子线程对象调用 start() 方法 , 子线程开始工作 (run 函数被执行 )
5. 子线程和主线程直接的数据通信是通过信号槽实现的
2. 第二种方式
1. 将要处理的操作封装成一个类 , 这个类从 QObject 派生 , 要使用 qt 中的信号槽机制
"url" : "http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As
g3Z0782.mp4" ,
"size" : 27473666 ,
"type" : "mp4"
}
]
}

3.上传的数据块头的处理

4.资源文件中的文件只能在程序中进行读操作

5.客户端上传数据组织和细节

6.上传进度条处理

7.通过指针求post请求数据块中的关键字思路

8.上传服务器端处理流程

9.代码调试

10.上传任务队列分析

11多线程上传的处理流程

12.多线程下载思路

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

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

相关文章

OpenCV图像拼接(5)用于计算一组图像的特征点和描述符的函数computeImageFeatures()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::computeImageFeatures 是 OpenCV 中用于计算一组图像的特征点和描述符的函数,通常在图像拼接或类似的任务中使用。这个函…

详细解析格式化消息框的代码

书籍:《windows程序设计(第五版)》的开始 环境:visual studio 2022 内容:格式化消息框 说明:以下内容大部分来自腾讯元宝。 封装MessageBoxPrintf 在MessageBoxPrintf()中处理可变参数,通过va_list机制&#xff0c…

【SpringSecurity】详细核心类与过滤器流程讲解和封装通用组件实战

Spring Security 全面介绍 1. 什么是 Spring Security? Spring Security 是一个功能强大且高度可定制的认证和访问控制框架,是保护基于 Spring 的应用程序的标准工具。它是一个专注于为 Java 应用程序提供认证和授权的框架,实际上它是 Spri…

浅谈Qt事件子系统——以可拖动的通用Widget为例子

浅谈Qt事件子系统——以可拖动的通用Widget为例子 这一篇文章是一个通过实现可拖动的通用Widget为引子简单介绍一下我们的事件对象子系统的事情 代码和所有的文档 1:Qt侧的API介绍和说明 ​ 这个是每一个小项目的惯例,我会介绍大部分Qt程序中使用到的…

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…

(七)Reactor响应式编程框架

一、简介 Reactor 是运行在 JVM 上的编程框架,最大特点是完全非阻塞,能高效控制 “背压”,简单来说就是处理数据传输时速度不匹配的问题 。它能和 Java 8 里的一些功能直接搭配使用,像处理异步结果的 CompletableFuture、处理数据…

从边缘到核心:群联云防护如何重新定义安全加速边界?

一、安全能力的全方位碾压 1. 协议层深度防护 四层防御: 动态过滤畸形TCP/UDP包(如SYN Flood),传统CDN仅限速率控制。技术示例:基于AI的协议指纹分析,拦截异常连接模式。 七层防御: 精准识别业…

【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8

目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…

Java 方法执行原理底层解析

java 文件经过javac编译后,变成了存储了一系列指令的.class文件。本文从指令层面分析Java 方法从解析、调用到执行的过程。 1 指令 一般格式:操作码 [操作数1] [操作数2] ... 操作码 1个字节的无符号整数(范围:0x00 ~ 0xFF&…

【数学建模】最大最小值模型详解

数学建模中的最大最小值模型详解 文章目录 数学建模中的最大最小值模型详解引言最大最小值模型的基本概念最大化问题最小化问题 常见的求解方法1. 微积分法2. 线性规划3. 非线性规划4. 动态规划 实际应用案例案例1:生产规划问题案例2:投资组合优化 最大最…

C#的List和DIctionary实现原理(手搓泛型类以及增删查改等功能)

这里写自定义目录标题 ListDIctionary List MyList类:这是一个泛型类,能够存储任意类型的元素。 _items数组:用于实际存储元素。 _size变量:记录当前列表中的元素数量。 构造函数:初始化数组容量为 4。 Count属性&…

Linux系统管理与编程08:任务驱动综合应用

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境:Lamp(linux httpd mysql8.0 php) [步骤] 3 …

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了&#xff0c;调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平台高速闭环控制

在Windows系统下&#xff0c;通过LabVIEW实现高速闭环控制面临两大核心挑战&#xff1a;非实时操作系统的调度延迟与硬件接口的传输速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;为例&#xff0c;其理论采样率可达1.25 MS/s&#xff08;单通道&#xff09;&a…

Java面试黄金宝典8

1. 什么是 Spring MVC 定义 Spring MVC 是 Spring 框架里用于构建 Web 应用程序的模块&#xff0c;它严格遵循 MVC&#xff08;Model - View - Controller&#xff09;设计模式。这种设计模式把应用程序清晰地划分成三个主要部分&#xff1a; Model&#xff08;模型&#xff0…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整活…

分享最近前端面试遇到的一些问题

前情提要&#xff08;分享个人情况&#xff0c;可以直接跳过&#xff09; 先说一下我的个人情况&#xff0c;我是2026届的&#xff0c;目前是在找前端实习。 3月初&#xff0c;从3月3日开始在Boss上投简历。 分享我的个人故事&#xff0c;不想看可以直接滑到下面&#xff0c;…

rip 协议详细介绍

以下是关于 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09; 的详细介绍&#xff0c;涵盖其工作原理、版本演进、配置方法、优缺点及实际应用场景。 1. RIP 协议概述 类型&#xff1a;动态路由协议&#xff0c;基于距离矢量算法&#xff08…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…

KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来

第一部分&#xff1a;KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…