FTPUpload

2023-11-16

std::string g_strVer = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1";

size_t CallBackHeader(void* pStr,size_t tSize,size_t tNumber,void* pUserData)
{
	size_t tLen = tSize*tNumber;
	CHttpCurlDlg* pThis = (CHttpCurlDlg*)pUserData;
	(&(pThis->m_strHeader))->append((const char*)pStr,tLen);
	return tLen;
}

size_t CallBackReadFun(void *pStr,size_t tSize,size_t tNumber,void* pUserData)
{
	size_t tLen = 0;
	tLen = fread(pStr,tSize,tNumber,(FILE*)pUserData);
	return tLen;
}

size_t CallBackProgress(void* pUserData,double dTotalDown,double dNowDown,double dTotalUpLoad,double dNowUpLoaded)
{
	size_t tFlag = 0;
	double dProg = (dNowUpLoaded*100)/dTotalUpLoad;
	return tFlag;
}

size_t CallBack_WriteFun(void* ptr, size_t size, size_t nmemb, void *stream)
{
	assert(stream != NULL);  
	size_t len = size * nmemb;  

	CHttpCurlDlg* pThis = (CHttpCurlDlg*)stream;
	std::string strContext = "";
	strContext.append((char*)ptr, len);

	long retcode = 0;
	CURLcode cCode = curl_easy_getinfo(pThis->m_pCurl, CURLINFO_RESPONSE_CODE , &retcode); 

	size_t written = -1;	
	if ( (cCode == CURLE_OK) && retcode == 200 )
	{
		written = fwrite(ptr, size, nmemb, pThis->m_fpFileHandle);
	}
	return written;
}

void FTPUPload()
{
	// TODO: 在此添加控件通知处理程序代码
	CURL*		pCurl = NULL;
	CURLcode	cCode;

	std::string strURL		= "ftp://10.20.8.162:9000/upload/ZIP/codebackup.zip";
	cCode = curl_global_init(CURL_GLOBAL_WIN32);
	FILE *fp = fopen("D:\\ReadyToUpload\\codebackup.zip", "rb");
	fseek(fp, 0, 2);
	curl_off_t file_size = ftell(fp);
	rewind(fp);

	int nTimeOut = 4500;
	pCurl = curl_easy_init();

	// 设置属性
	curl_easy_setopt(pCurl, CURLOPT_URL, strURL.c_str());
	curl_easy_setopt(pCurl,CURLOPT_USERAGENT,g_strVer.c_str());

	curl_easy_setopt(pCurl, CURLOPT_UPLOAD, 1L);

	//设置读取内容到上传缓冲区的回调函数
	curl_easy_setopt(pCurl, CURLOPT_READFUNCTION,CallBackReadFun);
	curl_easy_setopt(pCurl, CURLOPT_READDATA, fp);

	//若目录不存在则让ftp创建
	curl_easy_setopt(pCurl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
	
	//CURLOPT_INFILESIZE一般协议第三个参数为long类型
	//curl_easy_setopt(pCurl, CURLOPT_INFILESIZE, file_size);

	//CURLOPT_INFILESIZE_LARGE为soap协议必须设定的参数,传入第三个参数类型为curl_off_t
	curl_easy_setopt(pCurl, CURLOPT_INFILESIZE_LARGE, file_size);

	//设置帐号密码(如果需要)
	//curl_easy_setopt(pCurl, CURLOPT_USERPWD, "lionel:lionel007");     
	
	//连接超时设置   
	//curl_easy_setopt(pCurl, CURLOPT_CONNECTTIMEOUT, nTimeOut);  

	//设置头处理函数   
	//curl_easy_setopt(pCurl, CURLOPT_HEADERFUNCTION, CallBackHeader);  
	//curl_easy_setopt(pCurl, CURLOPT_HEADERDATA, &strBuffer);  
	
	// 设置断点续传   
	//curl_easy_setopt(pCurl, CURLOPT_RESUME_FROM_LARGE, bIfBreak?Len1:len2); 

	//上传进度回调函数
	curl_easy_setopt(pCurl, CURLOPT_NOPROGRESS, 0L);
	curl_easy_setopt(pCurl, CURLOPT_PROGRESSFUNCTION, CallBackProgress); //上传进度回调方法  
	curl_easy_setopt(pCurl, CURLOPT_PROGRESSDATA, this); 

	// 执行上传操作
	cCode = curl_easy_perform(pCurl);
	if (cCode == CURLE_OK)
	{
	}

	fclose(fp);
	curl_easy_cleanup(pCurl);
	curl_global_cleanup();
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTPUpload 的相关文章

  • pyQt5 学习笔记(19)QFrame 边框设置

    文章目录 一 QFrame 简介 二 QFrame 的创建 三 组合效果图 四 QFrame 的功能 API 1 功能 2 QFrame 结构 3 使用总结 1 挑选目标样式 2 根据参数写程序 五 信号 一 QFrame 简介 QFram
  • mysql 数组_MySQL如何实现数组功能

    前段时间想要用数组功能实现某些需求 结果发现mysql不支持数组 这个确实让人很头痛 查阅官方文档 也没有这一方面的资料 结果在网上 看到了某仁兄贴出了变相实现的一种方法 代码如下 DELIMITER DROP DATABASE IF EX
  • 【Ubuntu】使用grub2挂载NFS根文件系统(rootfs)

    经常调试arm开发板的同学应该比较熟悉uboot 它可以使用tftp自动下载内核并通过nfs挂载rootfs 其实 作为x86平台常见的bootloader grub也可以做到通过nfs挂载rootfs 安装grub2 目前新版的ubunt
  • 云vscode搭建--使用容器化部署

    Vscode作为一个轻量级的IDE 其支持丰富的插件 而通过这些插件我们就可以实现在Vscode中写任何语言的代码 Code Server是Vscode的网页版 启动Code Server之后我们就可以在浏览器中打开vscode来愉快的编写
  • java 分页page_java分页PageHelper的使用

    我以前写分页都是些工具类后面偶然的机会发现了这个pagehelper在github上开源框架 maven依赖 com github pagehelper pagehelper 5 1 6 只需要在service层加上然后在controlle
  • 网络安全单兵工具 -- YAKIT

    网络安全单兵工具 YAKIT 一 下载及安装 1 原作者及下载地址 https github com yaklang yakit 2 双击下载好的exe文件 点击核心引擎安装与升级 3 点击意见更新Yak引擎 4 以管理员启动 5 点击连接
  • 《从Paxos到ZooKeeper》读书笔记之第一章(二)

    从Paxos到ZooKeeper 读书笔记之第一章 二 1 2从ACID到CAP BASE 这一节由三小节 从大家数值的数据库事务的四个特性 引出来分布式事务的概念 通过对ACID模型的讨论 提出如何构建一个兼顾可用性和一致性的分布式系统方
  • 前端技术面试大全

    快速搞定前端技术一面 匹配大厂面试要求 迅速建立初中级前端面试 0 2年 JS知识体系 掌握解决面试题的思路与技巧 知识点介绍 CSS 布局 定位 移动端响应式 ES语法 原型 原型链 作用域 闭包 异步 单线程 Web API DOM B
  • SQL复习要点

    1 数据库系统阶段的数据管理特点 1 数据结构化2 数据共享性高 冗余度小 易扩充 3 数据独立性高4 统一的数据管理和控制功能 2 数据库 database DB 是存放数据的仓库 3 数据库管理系统 data base manageme
  • js 截取字符串里的IP和port

    例如 str 192 168 12 254 18081 1 用 ip和port 的正则 let ip reg d gi let ip ip reg exec str ip ip 0 let port reg d 1 5 let port s
  • C++,菱形继承和虚继承

    一 菱形继承的基本概念 菱形继承又称为钻石继承 由公共基类派生出多个中间子类 又由多个中间子类共同派生出汇聚子类 汇聚子类会得到 中间子类从公共基类继承下来的多份成员 菱形继承的格式 A 公共基类 B C 中间子类 D 汇聚子类 示例 in
  • 读《企业中的开放源代码》有感

    文章目录 开源代码的益处 开源的本质 开源是一门学科 开源代码的益处 学习出色编码技能的最佳方法是开发开源项目 注意是开发而不是阅读 因为可以研究该领域内顶尖编码员所采用的实践 以更快的方式启动新项目 从此没有必要再闭门造车 开源的本质 我
  • Linux平台下二进制安装FastDDS

    1 Linux平台下二进制安装 该页面主要介绍在linux环境下 使用二进制release安装 eProsima公司的 Fast DDSThe 安装 内容 运行应用 在一个CMake项目中包含Fast DDS 卸载 1 1 安装 ePros
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • 线程池使用之自定义线程池

    目录 一 Java内置线程池原理剖析 二 ThreadPoolExecutor参数详解 三 线程池工作流程总结示意图 四 自定义线程池 参数设计分析 1 核心线程数 corePoolSize 2 任务队列长度 workQueue 3 最大线
  • Java学习心得8——继承

    当我们需要设计几个类似的类的时候 我们可以把它们之间的相同的东西提取出来放到一个父类中 然后这几个类就可以不写这些相同的东西 只要去继承那个父类就可以得到这些东西了 假如我们需要设计三个类Fish Bird Dog 它们的共同点是都有年龄
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)

    1 问题描述 在使用sudo apt get update 和upgrade中会出现 dpkg 警告 无法找到软件包ca certificates 的文件名列表文件 现假定该软件包目前没有任何文件被安装在系统里 dpkg 警告 无法找到软件
  • docker gitlab 数据 迁移 2770

    我的操作步骤 1 把 gitlab目录下 的 data etc log 目录下压缩并拷贝 2 把压缩文件 拷贝到新的gitlab 指定目录下 3 启动 错误 up to date storage directory var opt gitl
  • Qt中使用OpenGL渲染视频

    Qt5 4之后 OpenGL在Qt中可以通过QOpenGLWidget和QOpenGLFunctions来实现 以下Demo 只展示OpenGL相关部分 解码出AVFrame后对其进行渲染 顶点Shader static const cha

随机推荐

  • go语言基础-----24-----命令行解析Go flag、uuid唯一ID

    一 命令行解析Go flag 1 定义flag参数的相关函数 参数有三个 第一个为 参数名称 第二个为 默认值 第三个是 使用说明 1 通过 flag String Bool Int 等 flag Xxx 方法 该种方式返回一个相应的指针
  • powershell初探(九)

    最近公司需要用到com 其中涉及到很多的注册问题 记录在这里 希望在帮到别人的同时 也能解决自己的问题 0 写在前面 本人菜鸟一枚 本章的总结都来自于网络 如果有错漏之处 还望牛人指正 1 COM是做什么用的 com是包含了实现一个或多个接
  • jQuery 入门教程(15): 删除HTML元素

    jQuery使用下面两个方法来删除或是清空某个HTML元素 remove 删除指定的元素 包括其子元素 empty 清空指定元素的子元素 例如 html view plain copy print
  • 通过查看Qt助手(QtAssistant)了解并使用自己需要Qt库

    常用库 我们需要知道常用的库有哪些 才能使用他们 QtCore基本库 基本数据类型 QString 不直接使用c 中String QByteArray 字节数组 基本数据结构 QList QVector QMap 输入输出类 QTextSt
  • MFC中删除控件的操作

    一 手动删除 1 首先确定控件有哪些相关的变量和函数 打开 rc2文件在里面删除对应的控件图标 2 打开主对话框头文件 一般类向导生成的函数和变量定义都在头文件的最后一个 public l里 找到生成的变量定义和函数定义将其删除 3 打开对
  • 计算机专业推荐游戏本,十大游戏笔记本电脑排名 热门游戏本推荐

    1 惠普 暗影精灵4 Pro 15 6英寸游戏本 暗影精灵4 Pro最吸引人的点莫过于搭载了新一代GeForce RTX2060显卡 拥有6G显存 性能提升高达6倍 并将AI增强图形技术和光线追踪技术引入游戏 让游戏世界可以模拟每道光迹的真
  • Quick Test Professional9.0编程常用方法及实例详解

    通过QTP获取Web页面中对象属性 在制作自动化用例时需要知道大部分控件的name值 我们不可能都向开发人员询问 QTP为我们提供了一个很好的工具 Object Spy 使用它可以为我们把每个需要的对象属性全部列出来 打开QTP 工具 对象
  • 解决keil5仿真提示内存不对齐

    仿真提示 JLink Warning Mis aligned memory write Address 0x20000000 NumBytes 2 Alignment 2 Halfword aligned 解决办法 将keil安装目录D K
  • Manjaro linuxqq闪退问题

    删除配置文件即可 rm r config QQ
  • Java中的抽象类和接口有什么区别(面试题)

    Java中的抽象类和接口有什么区别 面试题 概念 对比 补充 概念 抽象类 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足够的信息来描绘一个具体的对象 这样的类就是抽象
  • 【深度】区块链技术安全威胁分析(附下载)

    解码区块链 专题文章一 区块链技术安全威胁分析 2020年4月20日 国家发改委明确 新基建 定义和范围 表态 区块链 被纳入其中 为深入探索区块链技术的发展应用 挖掘对零售行业产生的影响和机遇 苏宁零售技术研究院联合业内资深学者和企业技术
  • MSP432 串口通信

    文章目录 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 二 UART模式的特性 三 库函数 四 一般配置步骤 五 代码 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 详
  • python中数据结构之列表,元组,字典,集合

    一 列表 列表 引入一个新的概念 数据结构 数据结构是通过某种方式组织在一起的数据元素的集合 这些数据元素可以是数字或字符 甚至可以是其他数据结构 在 python 中 最基本的数据结构是序列 序列中的每个元素匾被分配一个序号 即元素的位置
  • php://filter(文件包含漏洞利用)

    网址 index php page php filter convert base64 encode resource index php 例如 http 120 24 86 145 8005 post index php file php
  • 论文写作 计算机类顶会顶刊,及论文发表指导

    计算机方向的一些顶级会议和期刊 转载 国内的学报期刊 SCI级 但是IF比较低 也不是特别专门针对计算机视觉 物理学报 红外与毫米波学报 etc EI级 自动化学报 光学精密工程 电子学报 软件学报 计算机研究与发展 计算机学报 征稿指南
  • C#通过TCP传送结构体

    1 定义结构体 命名空间 using System Runtime InteropServices 注意这个属性不能少 StructLayoutAttribute LayoutKind Sequential CharSet CharSet
  • 元器件选型实例(如何选一款合适的 DC-DC )

    授人以鱼不如授人以渔 实际项目的元器件选型 如何选择合适的元器件 矜辰所致 目录 前言 一 应用背景 二 选型准备 2 1 考虑因素 通用因数 结合实际 2 2 初步确定方案 三 实际选型 3 1 查找目标 3 2 筛选目标 价格和库存 3
  • 设计模式详解(四)——原型模式

    一 场景问题 在电商系统中 订单服务通常是业务核心模块之一 在提交订单的过程中 往往会出现某个订单数额较大的订单 例如一些企业订单订购公司员工节假日礼品 往往会订购成千上万件 如果不做拆分 就会导致订单票据较长 此时就会有拆分订单的操作 假
  • CSS 媒体查询

  • FTPUpload

    std string g strVer Mozilla 5 0 Windows NT 6 1 WOW64 rv 13 0 Gecko 20100101 Firefox 13 0 1 size t CallBackHeader void pS