#include <iostream>

#include <curl/curl.h>

size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) {

// 这里可以读取文件数据,但在这个例子中,我们不需要

return size * nmemb;

}

int main() {

CURL *curl;

CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT);

curl = curl_easy_init();

if(curl) {

const char *data = "fieldname=value"; // 表单数据

const char *filename = "path/to/your/file"; // 文件路径

const char *url = "http://your.upload.server/endpoint"; // 上传URL

curl_easy_setopt(curl, CURLOPT_URL, url);

curl_easy_setopt(curl, CURLOPT_POST, 1);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);

curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);

std::string result;

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);

struct curl_httppost *formpost = NULL;

struct curl_httppost *lastptr = NULL;

struct curl_slist *headerlist = NULL;

CURLFORMcode formcode = CURL_FORMADD_OK;

// 添加文件到Form-Data

formcode = curl_formadd(&formpost,

&lastptr,

CURLFORM_COPYNAME, "file", // 表单字段名

CURLFORM_FILE, filename, // 文件路径

CURLFORM_END);

headerlist = curl_slist_append(headerlist, "Content-Type:multipart/form-data;charset=UTF-8");

if (formcode != CURL_FORMADD_OK) {

fprintf(stderr, "curl_formadd() failed: %s\n", curl_formadd_strerror(formcode));

}

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

// 设置Form-Data

curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

// 执行上传

res = curl_easy_perform(curl);

// 清理Form-Data

curl_formfree(formpost);

if(res != CURLE_OK) {

fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));

}

// 清理CURL

curl_easy_cleanup(curl);

}

curl_global_cleanup();

return 0;

}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐