Table of Contents
libcurl file upload
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
source
const char *file = "filename.txt";
string url = safe_strcat(SERVER_URL, "/upload");
curl_mime *form = NULL;
curl_mimepart *field = NULL;
CURL *curl;
CURLcode res;
curl = curl_easy_init();
char buf[BUFSIZE];
if(curl) {
form = curl_mime_init(curl);
// FIELD
field = curl_mime_addpart(form);
curl_mime_name(field, "rawfile");
curl_mime_filedata(field, file);
field = curl_mime_addpart(form);
curl_mime_name(field, "idx");
curl_mime_data(field, "1", CURL_ZERO_TERMINATED);
// URL
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// HEADERS
snprintf(buf, BUFSIZE, "Authorization: Bearer %s", token);
struct curl_slist *list = NULL;
list = curl_slist_append(list, "accept: */*");
list = curl_slist_append(list, buf);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
// METHOD
curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
// SSL
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1L);
// CALLBACK
// 예제 : https://curl.se/libcurl/c/getinmemory.html
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_memory_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &chunk);
res = curl_easy_perform(curl);
curl_slist_free_all(list);
if (res != CURLE_OK) {
curl_easy_cleanup(curl);
return -1;
}
curl_mime_free(form);
curl_easy_cleanup(curl);
}
https://curl.se/libcurl/c/postit2.html