最近测试如何上传文件到服务器。原来传照片一致通过binary 形式传文件,或者把图片base64编码传图片。一致没有用form-data 表单形式发送数据,今天尝试下如何使用libcurl提供的API上传文件。

Sample code:

#include <iostream>
#include <curl/curl.h>
#include <string.h>using namespace std;
//回调函数  得到响应内容
int write_data(void* buffer, int size, int nmemb, void* userp){std::string * str = dynamic_cast<std::string *>((std::string *)userp);str->append((char *)buffer, size * nmemb);return nmemb;
}
int upload(string url, string &body,  string* response);int main(int argc, char** argv){std::string body;std::string response;int status_code = upload("http://172.28.28.17:80/files/deviceupload", body, &response);if (status_code != CURLcode::CURLE_OK) {return -1;}cout << body << endl;cout << response << endl;return 0;
}int upload(string url, string &body,  string* response)
{CURL *curl;CURLcode ret;curl = curl_easy_init();struct curl_httppost* post = NULL;struct curl_httppost* last = NULL;if (curl){curl_easy_setopt(curl, CURLOPT_URL, (char *)url.c_str());           //指定urlcurl_formadd(&post, &last, CURLFORM_PTRNAME, "path", CURLFORM_PTRCONTENTS, "device_cover", CURLFORM_END);//form-data key(path) 和 value(device_cover)curl_formadd(&post, &last, CURLFORM_PTRNAME,  "file", CURLFORM_FILE, "./test.jpg",CURLFORM_FILENAME, "hello.jpg", CURLFORM_END);// form-data key(file) "./test.jpg"为文件路径  "hello.jpg" 为文件上传时文件名curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);                     //构造post参数    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);          //绑定相应curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)response);        //绑定响应内容的地址ret = curl_easy_perform(curl);                          //执行请求if(ret == 0){curl_easy_cleanup(curl);    return 0;  }else{return ret;}}else{return -1;}
}

编译:

    g++  -O2 -Wall -Wno-write-strings  -D_LINUX  -L../libcurl/lib -I../libcurl/include  -std=c++11  ./test_main.cpp   -L../libcurl/lib -lcurl -lssl -lcrypto  -ldl -pthread -o sample_X86_64

如果文件路径不对 会不执行请求。

curl post表单上传文件(C++)相关推荐

  1. PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码

    PHP curl模拟表单上传文件  微信公众号素材管理接口crul文件上传核心源码 /*** curl 上传文件* @param $url* @param $filePath* @param stri ...

  2. 七牛云上传文件之表单上传文件

    本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...

  3. php无表单上传文件,php – 如何使用没有实体类的表单上传文件

    我试图使用没有实体类的表单上传文件.到目前为止没有运气. // Controller public function uploadAction() { $request = $this->get ...

  4. php文件上传并保存路径到数据库,thinkphp表单上传文件并将文件路径保存到数据库中?...

    上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` (  `id` int(11) ...

  5. android multipartentity 怎么上传参数,android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b...

    android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b 短版本-.jar已弃用,其升级版本java.lang.NoClassDefFoundError在 ...

  6. form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?

    今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈.现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧. 我们分以下3种情况来谈这个 ...

  7. php处理表单上传文件

    使用表单上传文件的时候,表单的提交方式必须是post提交方式,上传文件的input控件type属性值应为file,最重要的是form标签需要加一个enctype="multipart/for ...

  8. QT模拟表单上传文件到微信服务器

    最近做微信开发,需要上传素材到微信服务器,我就用qt写了一个界面上传素材,首先我们来看下最终的界面: 然后将里面的access_token后面的lineEdit命名为:accessMediaEdit, ...

  9. serverlet 原理_serverlet实现表单上传文件原理

    ("/home/jh/upload/request.txt"); PrintWriter fileout = new PrintWriter(new FileWriter(f)); ...

最新文章

  1. 【jQuery】jQuery知识点梳理(持续更新)
  2. 你一定需要知道的高阶JAVA枚举特性!
  3. Java 运行时的内存划分
  4. android点击弹出日期选择器,关于Android 点击按钮弹出日期选择器
  5. HFSS中的求解类型(Solution Type)
  6. CentOS 7 防止端口自动关闭
  7. 来自未来,2022 年的前端人都在做什么?
  8. mysql挂载数据卷_记一次生产数据库数据文件进行分区转移
  9. linux新手常用命令
  10. 2016年中国国际信息通信展览会在北京开幕
  11. datatable中使用linq的条件或_C# 10. LINQ 的三种查询语句写法
  12. 1008 数组元素右移k位
  13. 【原生JS】web原生文字轮播效果
  14. android toast防重_安卓Toast自定义及防止重复显示
  15. Clickhouse(20.4.2.9) SSB性能测试
  16. 利用油猴脚本显示扇贝网真实打卡日记
  17. 用r语言画时序图和自相关图,并检验纯随机性
  18. python股票回测源码_Python爬虫回测股票的实例讲解
  19. 苹果手机通讯录删除了怎么恢复
  20. HTML简单入门 代码加注释详解

热门文章

  1. OpenCV 图像缩放:cv.resize() 函数详解
  2. Typora的可代替方案
  3. 我讨厌这个绿油油的头像!我用opencv换一下背景
  4. Android面试笔记之事件分发机制
  5. 中国联通再现用户净流失,在运营商市场进一步边缘化
  6. 百度java热力图_百度地图 之 热力图
  7. 成都小程序开发公司:智慧农业共享农场菜园,走地鸡认养小程序APP源码开发的案例介绍
  8. matlab功率放大仿真,基于Simulink的音响放大器仿真研究.doc
  9. 国防科技大学903计算机专业综合,2021年国防科技大学电子信息(085400)考研专业目录_硕士研究生考试范围 - 学途吧...
  10. python为什么有这么多库_为什么C++没有Python那么多开源库?