curl http上传文件

	
	
	//回调函数
	static size_t write_data_upav( void *buffer, size_t size, size_t nmemb, void *userp) 
	{ 
		int segsize = size * nmemb; 

		if ( g_resp_upav_index + segsize > MAX_BUF_SIZE ) 
		{ 
			*(int *)userp = 0x01; 
			return 0x00; 
		} 

		memcpy( (void *)&(g_resp_upav[g_resp_upav_index]), buffer, (size_t)segsize); 
		g_resp_upav_index += segsize; 

		return segsize; 
	} 

	//上传文件主函数
	bool upload_file(const std::string& filename, 
		const std::string& url, 
		double fsize,
		std::string& out_resp)
	{
		g_resp_upav_index = 0x00;
		memset(g_resp_upav, 0x00, MAX_BUF_SIZE);

		CURL *curl;
		CURLcode res;

		char fname[1024] = {0x00};
		strcpy(fname, filename.c_str());
		char url_buf[1024] = {0x00};
		strcpy(url_buf, url.c_str());

		struct curl_httppost *formpost=NULL;
		struct curl_httppost *lastptr=NULL;
		struct curl_slist *headerlist=NULL;
		static const char buf[] = "Expect:";

		curl_global_init(CURL_GLOBAL_ALL);

		/* Fill in the file upload field */ 
		curl_formadd(&formpost,
			&lastptr,
			CURLFORM_COPYNAME, "video",//此处是http链接的字段,比如:http::/localhost:8080/video?
			CURLFORM_FILE, (char*)fname,
			CURLFORM_END);


		/* Fill in the submit field too, even if this is rarely needed */ 
		curl_formadd(&formpost,
			&lastptr,
			CURLFORM_COPYNAME, "submit",
			CURLFORM_COPYCONTENTS, "send",
			CURLFORM_END);

		curl = curl_easy_init();
		/* initalize custom header list (stating that Expect: 100-continue is not
		wanted */ 
		headerlist = curl_slist_append(headerlist, buf);
		double up_size = 0x00;
		if(curl) 
		{
			/* what URL that receives this POST */ 
			curl_easy_setopt(curl, CURLOPT_URL,url_buf);
			curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
			curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data_upav); 

			/* Perform the request, res will get the return code */ 
			res = curl_easy_perform(curl);
			/* Check for errors */ 
			if(res != CURLE_OK)
				fprintf(stderr, "curl_easy_perform() failed: %s\n",
				curl_easy_strerror(res));

			curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &up_size);

			/* always cleanup */ 
			curl_easy_cleanup(curl);

			/* then cleanup the formpost chain */ 
			curl_formfree(formpost);
			/* free slist */ 
			curl_slist_free_all (headerlist);

			curl_global_cleanup();

			//数据的处理
			out_resp = "";
			if(g_resp_upav_index > 0x00)
			{
				out_resp.append(g_resp_upav, g_resp_upav_index);
				out_resp = Utf8ToGBK(out_resp);
			}
		}
		//判断结果
		return (res == CURLE_OK && (up_size >= fsize));
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值