libcurl file upload

By | 2022년 2월 9일
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);
}

One thought on “libcurl file upload

답글 남기기