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

libcurl8.9.1 上传mp4文件

在postman 中使用POST----》body----》form-data

使用libcurl提交代码方式:

结构体:

#define MAX_ARRAY_SIZE      5*1024*1024struct SMART_DATA_CACHE
{char* buf;long dwTotalLen;SMART_DATA_CACHE(){dwTotalLen = 0;buf = nullptr;while (!buf) {try {buf = new char[MAX_ARRAY_SIZE];}catch (...) {}}memset(buf, 0x00, MAX_ARRAY_SIZE);}~SMART_DATA_CACHE(){if (buf) {delete[] buf;buf = nullptr;dwTotalLen = 0;}}
};

接收回调:

size_t ManageCurl::http_recv_cb(void* ptr, size_t size, size_t nmemb, void* stream)
{SMART_DATA_CACHE* pDataBuf = (SMART_DATA_CACHE*)stream;if (pDataBuf) {if (pDataBuf->buf) {if (pDataBuf->dwTotalLen + size * nmemb < MAX_ARRAY_SIZE) {memcpy(pDataBuf->buf + pDataBuf->dwTotalLen, ptr, size * nmemb);pDataBuf->dwTotalLen += size * nmemb;}}}return size * nmemb;
}

调用:

CURL* curl = curl_easy_init();
if (curl) {struct curl_slist* http_header = NULL;/* 填充文件上传字段 */curl_mime* form = curl_mime_init(curl);curl_mimepart* field = curl_mime_addpart(form);curl_mime_name(field, "file");curl_mime_filedata(field, "d:\\2024_08_13_11_14_17.991.mp4");//http_header = curl_slist_append(http_header, "Expect:");//http_header = curl_slist_append(http_header, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3");http_header = curl_slist_append(http_header, "Charset: UTF-8");http_header = curl_slist_append(http_header, "Connection: keep-alive");//保持长连接http_header = curl_slist_append(http_header, "Content-Type:multipart/form-data");//保持长连接curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_header);//修改协议头curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, http_recv_cb);//设置接收回调curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&stRecv);//设置设置参数curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);//设置连接时的超时时间为5秒curl_easy_setopt(curl, CURLOPT_TIMEOUT, nTimeout);//超时秒为单位curl_easy_setopt(curl, CURLOPT_URL, pUrl);//指定URLcurl_easy_setopt(curl, CURLOPT_MIMEPOST, form);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);CURLcode res = curl_easy_perform(curl);//执行long nRet = 0;CURLcode codeRet = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &nRet);if (codeRet == CURLE_OK && nRet == 200) {bResult = true;}curl_easy_cleanup(curl);curl_mime_free(form);curl_slist_free_all(http_header);
}

 这里需要注意:

1. Content-Type为 multipart/form-data

2.curl_easy_setopt(curl, CURLOPT_POST, 1L); 不需要指定,所以不需要添加该语句

3.下面这段代码上传不行

curl_easy_setopt(curl, CURLOPT_READFUNCTION, http_read_cb);
curl_easy_setopt(curl, CURLOPT_READDATA, pFile);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)stFileInfo.st_size);

4. 下面这句代码也不行

curl_formadd((curl_httppost**)&formpost,
               (curl_httppost**)&lastptr,
               CURLFORM_COPYNAME, "File1",
               CURLFORM_FILE, "d://进步.txt",
               CURLFORM_FILENAME, pUrlName,
               CURLFORM_END);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java基础概念17-static
  • 关于宠物浮毛对身体是否有害?宠物空气净化器选对告别浮毛困扰
  • 《雅思口语真经总纲1.0》话题实战训练笔记part1——6. Music
  • 海量日志数据收集监控平台应该怎么设计和实现
  • Json-JacksonUtils工具类
  • 力扣高频SQL 50题(基础版)第四十二题之1517.查找拥有有效邮箱的用户
  • 经典文献阅读之--LESS-Map(长期定位轻量级和逐渐演进的语义地图方案)
  • Socket编程TCP 基础
  • 在Spring Boot应用中,如果你希望在访问应用时加上项目的名称或者一个特定的路径前缀
  • 2024下半年软考报名时间安排及报名流程
  • 1018 Public Bike Management
  • 【九芯电子】智能声控台灯语音模块,低成本语音识别芯片
  • 企业级OV SSL证书获取步骤
  • OpenCV 基本使用
  • 思科CCNP最新考证流程
  • 【Leetcode】104. 二叉树的最大深度
  • 5、React组件事件详解
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++类中的特殊成员函数
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript中的对象个人分享
  • Java知识点总结(JavaIO-打印流)
  • Python学习之路16-使用API
  • Theano - 导数
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue全家桶实现一个Web App
  • 不上全站https的网站你们就等着被恶心死吧
  • 码农张的Bug人生 - 见面之礼
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 我们雇佣了一只大猴子...
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (arch)linux 转换文件编码格式
  • (Python) SOAP Web Service (HTTP POST)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)linux下的时间函数使用
  • (转)项目管理杂谈-我所期望的新人
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (轉)JSON.stringify 语法实例讲解
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 4.0中的泛型协变和反变
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET DataGridView数据绑定说明
  • .net framework profiles /.net framework 配置
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net 垃圾回收机制原理(二)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /etc/sudoer文件配置简析
  • [04]Web前端进阶—JS伪数组