Libcurl 二进制上传文件

CURL* curl = curl_easy_init();
		if (curl){
			struct curl_slist* http_header = NULL;
			//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");//保持长连接

			struct curl_httppost *post = NULL;
			struct curl_httppost *last = NULL;
			curl_formadd(&post, &last, 
				     CURLFORM_COPYNAME, "file", 
				     CURLFORM_BUFFER, pFileName, 
				     CURLFORM_BUFFERPTR, pFileData,     
				     CURLFORM_BUFFERLENGTH, nFileData, 
				     CURLFORM_CONTENTTYPE, "image/jpeg",
				     CURLFORM_END);
			curl_formadd(&post, &last, CURLFORM_COPYNAME, "type", CURLFORM_COPYCONTENTS, pType, CURLFORM_END);
			curl_formadd(&post, &last, CURLFORM_COPYNAME, "devId", CURLFORM_COPYCONTENTS, pDevID, CURLFORM_END);
			curl_formadd(&post, &last, CURLFORM_COPYNAME, "datetime", CURLFORM_COPYCONTENTS, pstrTime, CURLFORM_END);

			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);//指定URL
			curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
			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;
			}
			else{
				LOG_INFO("http 错误码:%d    %s\n", nRet, stRecv.pVirtualAddr);
			}

			curl_easy_cleanup(curl);
			curl_formfree(post);
			curl_slist_free_all(http_header);
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用libcurl库进行POST方法上传文件的步骤如下: 1. 初始化curl库:`curl_global_init(CURL_GLOBAL_ALL);` 2. 创建curl句柄:`CURL* curl = curl_easy_init();` 3. 设置请求URL:`curl_easy_setopt(curl, CURLOPT_URL, url);` 4. 设置请求方式为POST:`curl_easy_setopt(curl, CURLOPT_POST, 1L);` 5. 设置上传的文件:`curl_easy_setopt(curl, CURLOPT_READDATA, file);` 其中,`file`为你要上传的文件的文件指针。 6. 设置上传的文件大小:`curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, file_size);` 其中,`file_size`为你要上传的文件的大小。 7. 设置上传的文件名:`curl_easy_setopt(curl, CURLOPT_POSTFIELDS, file_name);` 其中,`file_name`为你要上传的文件的文件名。 8. 执行请求:`curl_easy_perform(curl);` 9. 清理curl句柄:`curl_easy_cleanup(curl);` 完整的示例代码如下: ``` #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; FILE *file; const char *url = "http://example.com/upload.php"; const char *file_name = "example.txt"; long file_size; file = fopen(file_name, "rb"); if (!file) { fprintf(stderr, "Failed to open file '%s'\n", file_name); return 1; } fseek(file, 0L, SEEK_END); file_size = ftell(file); rewind(file); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_READDATA, file); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, file_size); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, file_name); res = curl_easy_perform(curl); if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } fclose(file); curl_global_cleanup(); return 0; } ``` 注意,这只是一个简单的示例,实际应用中还需要添加错误处理和其他必要的选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值