//回调函数
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));
}
curl http上传文件
最新推荐文章于 2023-11-05 22:30:12 发布