libcurl上传文件

libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>

 

这里主要汇总一下,libcurl上传的二种方式:

1、直接上传文件,类似form表单<input type=”file” />,<form enctype=”multipart/form-data”…;

2、上传二进制流;

 

至于设定自定义头,都是使用一样的方法

struct curl_slist *headers=NULL;
headers = curl_slist_append(headers, "Content-Type: text/xml");
headers = curl_slist_append(headers, "Accept: text/html, */*;q=0.01");
//...

//set headers
curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);


//last free the header list
curl_slist_free_all(headers); /* free the header list */

前往官网查看CURLOPT_HTTPHEADER>>

 

直接上传文件:

struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
 
curl_formadd(&formpost, &lastptr,
    CURLFORM_COPYNAME, "uploadfile",
    CURLFORM_FILE, "/",//imagepath
    CURLFORM_CONTENTTYPE, "Image/jpeg",
    CURLFORM_END);
 
curl_formadd(&formpost, &lastptr,
    CURLFORM_COPYNAME, "filename",
    CURLFORM_COPYCONTENTS, "test.jpg",
    CURLFORM_END);
 
curl_easy_setopt(m_curl,CURLOPT_HTTPPOST,formpost);
 
//last free post
curl_formfree(formpost);

如果上传其它文件类型,那就在curl_formadd中附加CURLFORM_CONTENTTYPE参数(Content-Type/Mime-Type)

二进制流上传:
//referer http://curl.haxx.se/mail/lib-2003-08/0190.html
curl_formadd(&post, &last,
             CURLFORM_COPYNAME, "file",
             CURLFORM_BUFFER, "unnamed.png",
             CURLFORM_BUFFERPTR, memblock,    
             CURLFORM_BUFFERLENGTH, memblock_length,
             CURLFORM_CONTENTTYPE, "image/png",
             CURLFORM_END);

 
‘' is the name of this part, 'unnamed.png' is the name set in the file name field.

上面的参数均不可缺省,如果缺省结果可能不太符合预期。其中Content-Type默认为“application/octet-stream”

CURLFORM_COPYNAME为上传的字段名,如上图所示(name之后)

CURLFORM_BUFFER  在没有使用CURLFORM_FILE上传自定义文件时使用,它用来告诉libcurl文件内容已经在缓存中了,在内容的头信息中它提供了filename字段。我之前没加这个参数发现一直上传不成功- -

*** 还有一个地方要注意的是:CURLFORM_BUFFERLENGTH它的类型必须为long

 

为了方便测试,我使用了node.js的formidable来调试

 

 

参考链接:

http://curl.haxx.se/libcurl/c/curl_formadd.html

http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

http://curl.haxx.se/libcurl/c/postit2.html

http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type

http://zengrong.net/post/2088.htm

http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working

通过HTTP协议上传文件

使用libcurl POST数据和上传文件

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

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

相关文章

MSP430F5529 DriverLib 库函数学习笔记(二)GPIO

目录硬知识一、MSP430单片机端口概述二、通用IO端口输出特性三、端口P1和P21&#xff0e;输入寄存器PxIN2&#xff0e;输出寄存器PxOUT3&#xff0e;方向寄存器PxDIR4&#xff0e;上拉/下拉电阻使能寄存器PxREN5&#xff0e;输出驱动能力调节寄存器PxDS6&#xff0e;功能选择寄…

IOS项目中加入Google Admob SDK

错误1. Undefined symbols for architecture i386: "_OBJC_CLASS_$_ASIdentifierManager", referenced from: objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o) "_OBJC_CLASS_$_SKStoreProductViewController", referenced from: …

【RocketMQ】MQ消息发送

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

MSP430F5529 DriverLib 库函数学习笔记(三)认识中断

目录一、硬知识中断的基本概念MSP430单片机中断源中断响应过程中断返回过程中断嵌套二、msp430f5529.h中所列的中断向量宏定义平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、硬知识 中断的基本概念 中断…

推荐系统相关算法

摘要&#xff1a; 热门推荐 协同过滤算法 矩阵分解 基于内容的推荐&#xff08;文本&#xff0c;标签&#xff0c;特征/profile&#xff09; 基于图的算法 内容&#xff1a; 热门推荐&#xff1a; 热门推荐本质上是一个排行榜&#xff0c;可能会考虑到时间衰减&#xff0c;商品…

冒泡排序的简单理解

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

微软职位内部推荐-Software Engineer II

微软近期Open的职位:Job Title: Software Engineer IIWork Location: Suzhou/Beijing, ChinaJob Description:Are you looking for a big challenge? Do you know why Big Data is the next frontier for innovation, competition and productivity? Come join us to build i…

司机和售票员问题 信号signal注册一例

#include <stdio.h> #include <stdlib.h> #include <signal.h>pid_t pid;void driver_handler(int signo) //司机的信号处理函数 {if (signo SIGUSR1)printf("Lets go!\n");if (signo SIGUSR2)printf("Stop the bus!\n");if (signo …

MSP430F5529 DriverLib 库函数学习笔记(四)UART通信

目录硬知识USCI通信模块USCI的UART模式1. USCI初始化和复位2. 异步通信字符格式3. 异步多机通信模式4. 自动波特率检测5. IrDA编码和解码6. 自动错误检测7. USCI接收使能8. USCI发送使能9. UART波特率的产生10. UART波特率的设置&#xff08;重要&#xff09;&#xff08;1&…

linux下编译安装MySQL5.6新版本

MySQL 5.5以上版本 与之前的版本安装出入有些区别&#xff1a; 下面是安装过程mysql5.6 下载地址&#xff1a;ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.6/一&#xff1a;卸载旧版本使用下面的命令检查是否安装有MySQL Serverrpm -qa | grep mysql有的话通过下面…

MSP430F5529 DriverLib 库函数学习笔记(四点五)printf打印输出

目录代码实现使相应工程支持打印浮点数实验结果平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)代码实现 重定向fputc(int ch, FILE *f)直接使用printf的方法只有字符串和%s打印正常&#xff0c;数字打印不出来…

Android学习第三天--事件监听器

事件监听器方式一&#xff1a; 匿名内部类&#xff0c;直接在组件上添加监听器&#xff1b;例子如下 button.setOnclickListener(new OnClickListener() {System.out.println("hahahh"); }); 监听方式二&#xff1a; 实现某个监听器的接口&#xff0c;然后在添加…

FileOutputSteam入门

FileOutputSteam 字节输入流 从控制台将字节保存到本地硬盘 package com.isoftstone.io; import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutStream {public static void main(String[] args){FileOutputStream fos null;try{//1、创建文…

认识弹性盒子flex

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Objective-C 语法

吧Category使用场景&#xff1a; -类包含了很多个方法的实现&#xff0c;而这些方法需要不同的团队成员来实现。 -当你在使用基础类库中的类时&#xff0c;不想集成这些类&#xff0c;只想添加一些方法时。 -Category能访问原始类的实例变量&#xff0c;但是不能添加实例变量&a…

flag

mark, to remember

MSP430F5529 DriverLib 库函数学习笔记(五)定时器A

目录硬知识定时器A 16位定时器原理&#xff08;1&#xff09;时钟源选择和分频器&#xff08;2&#xff09;Timer_A工作模式&#xff08;3&#xff09;捕获/比较模块&#xff08;4&#xff09;Timer_A中断&#xff08;重要&#xff09;定时器A API (机翻)定时器A配置和控制的函…

vim 常用快捷键(整理版)

最常用&#xff1a; x 删除后面的字符 X 删除前一个字符 删除3个字符就是3x dd:删除一行 D 删除到行尾 J:删除换行符&#xff0c;使下一行并上来。 nJ:连接后面的n行 u:撤销上一次操作 U:撤销当前行的所有修改 ctrlr:对撤消的撤消 I 在行首插入 a 在光标后插入 A…

快速排序——算法系列

快速排序&#xff1a; 思想&#xff1a;主要是利用了分而治之的思想&#xff0c;将一个大的排序问题简化成一个一个小的问题。 代码&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using Sys…

C++对象间通信组件,让C++对象“无障碍交流”

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…