当前位置: 首页 > news >正文

Ubuntu 22.04 下 CURL 分块上传文件(C++)

 实现类似下面Python request库代码,使用 CURL 库,实现文件分块上传、下载功能。

 首先向服务器发送请求,生成project_guid, 是项目流程设计。发送请求的header, body_json等格式,按照自己的项目进行修改即可。

import requests
import os
import re
import json

DOWNLOAD_RANGE = 102400


def download_chunk(url, project, output_path, start, end):
    cur_size = 0
    total_size = -1
    while cur_size != total_size:
        headers = {
            'Range': f'{start}-{end}',
            'Content-Type': 'application/json'
        }
        json_data = {
            'project': project
        }

        response = requests.get(url, headers=headers, json=json_data, stream=True)
        if response.status_code in (200, 206):
            tmp = int(response.headers.get('Content-Length'))
            data = re.search(r'(\d+)-(\d*)/(\d*)', response.headers.get('Content-Range'))
            total_size = int(data.group(3))

            with open(output_path, 'ab') as file:
                for chunk in response.iter_content(chunk_size=tmp):
                    if chunk:
                        file.write(chunk)
            cur_size += tmp
            start = cur_size
            end += tmp
            print(f'total_size: {total_size} tmp_size: {tmp} cur_size: {cur_size} '
                  f'begin: {int(data.group(1))} end: {int(data.group(2))} '
                  f'start: {start} end: {end}')
        else:
            print(f'Failed to download chunk: {

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AIRNet模型使用与代码分析(All-In-One Image Restoration Network)
  • 【小白学Python】自定义图片的生成(二)
  • 用Python绘制yolo训练结果比较图-论文需要
  • 鸿蒙轻内核A核源码分析系列六 MMU协处理器(1)
  • 【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)
  • C#操作MySQL从入门到精通(21)——删除数据
  • C# 设置PDF表单不可编辑、或提取PDF表单数据
  • 开发TEE的踩坑之配置PCCS
  • 子域名爆破工具
  • 拜托:不要像鲍勃大叔那样重构
  • eNSP学习——RIP路由协议的汇总
  • DP:回文串模型
  • 【数据结构】利用单链表再实现通讯录
  • 编程的作品怎么删除编程库:一步步的深入解析
  • 2. Revit API UI 之 IExternalCommand 和 IExternalApplication
  • 2017年终总结、随想
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • eclipse的离线汉化
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • golang中接口赋值与方法集
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Less 日常用法
  • Linux快速复制或删除大量小文件
  • 闭包,sync使用细节
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊redis的数据结构的应用
  • 目录与文件属性:编写ls
  • 盘点那些不知名却常用的 Git 操作
  • 新版博客前端前瞻
  • 一个JAVA程序员成长之路分享
  • 2017年360最后一道编程题
  • zabbix3.2监控linux磁盘IO
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #include
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $refs 、$nextTic、动态组件、name的使用
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (9)STL算法之逆转旋转
  • (C++)八皇后问题
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (篇九)MySQL常用内置函数
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .Net 垃圾回收机制原理(二)
  • .net后端程序发布到nignx上,通过nginx访问
  • @ConfigurationProperties注解对数据的自动封装
  • @Responsebody与@RequestBody
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @Valid和@NotNull字段校验使用
  • [ linux ] linux 命令英文全称及解释
  • [] 与 [[]], -gt 与 > 的比较