博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libcurl上传文件
阅读量:6249 次
发布时间:2019-06-22

本文共 1775 字,大约阅读时间需要 5 分钟。

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 */

 

直接上传文件:

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参数( )
二进制流上传:
//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的来调试

 

 

参考链接:

转载地址:http://ligia.baihongyu.com/

你可能感兴趣的文章
Horizontal List
查看>>
LocalDB在IIS中的运行失败
查看>>
DevExpress v15.2.4帮助文档下载清单
查看>>
listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
查看>>
js获取鼠标位置
查看>>
111
查看>>
LEADTOOLS Android的入门使用方法
查看>>
ubuntu12.04下使用su,vi等命令时,提示找不到命令
查看>>
Git的学习之路02 Git的工作流程、工作区、暂存区、版本库及创建版本库
查看>>
Servlet3.0 异步处理机制
查看>>
hiberante4 反常
查看>>
3系统启动后的 wifi 加载过程
查看>>
好用的开源二进制编辑器--NotePad++
查看>>
跟我一起学习ASP.NET 4.5 MVC4.0(六)
查看>>
CURL 命令行下载工具
查看>>
PMP 管理学6大定律之四(光环效应)
查看>>
ThinkPHP判断更新是否成功的正确方法
查看>>
Python时间处理
查看>>
【原创】 在django中使用celery 任务队列,redis做后端
查看>>
Python中下划线---完全解读 (转载),我认为是讲的最全面的了
查看>>