# \[Solved\] How to upload picture to mattermost server by using libcurl?

**URL:** <https://forum.mattermost.com/t/solved-how-to-upload-picture-to-mattermost-server-by-using-libcurl/8400>\
**Category:** Troubleshooting\
**Created:** [November 5, 2019, 3:16am UTC](https://forum.mattermost.com/t/solved-how-to-upload-picture-to-mattermost-server-by-using-libcurl/8400 "2019-11-05T03:16:31Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![xiagao](https://avatars.discourse-cdn.com/v4/letter/x/53a042/32.png) [@xiagao](https://forum.mattermost.com/u/xiagao)\
**Post date:** [November 5, 2019, 3:16am UTC](https://forum.mattermost.com/t/solved-how-to-upload-picture-to-mattermost-server-by-using-libcurl/8400/1 "2019-11-05T03:16:31Z")

</div>

Trying to build a c++ app to upload picture to mattermost server.I am using libcurl to upload right now. I have tried many sample on the internet,but none of them is working…Can I get some code sample that will work?Thanks a lot.

---

<div class="post-metadata">

**Author:** ![xiagao](https://avatars.discourse-cdn.com/v4/letter/x/53a042/32.png) [@xiagao](https://forum.mattermost.com/u/xiagao)\
**Post date:** [November 8, 2019, 8:29am UTC](https://forum.mattermost.com/t/solved-how-to-upload-picture-to-mattermost-server-by-using-libcurl/8400/2 "2019-11-08T08:29:42Z")

</div>

At last I find a solution:  
void uploadByMimeApi(string url, string channelId, string path, string fileName, string token)  
{  
url += “/api/v4/files”;

```
CURL *curl = curl_easy_init();
curl_mime *mime;
curl_mimepart *part;
curl_mimepart *part2;
curl_mimepart *part3;

/* Build an HTTP form with a single field named "data", */
mime = curl_mime_init(curl);
part = curl_mime_addpart(mime);

curl_mime_name(part, "files");
curl_mime_filedata(part, path.c_str());
curl_mime_type(part, "image/jpeg");

part2 = curl_mime_addpart(mime);
curl_mime_data(part2, channelId.c_str(), CURL_ZERO_TERMINATED);
curl_mime_name(part2, "channel_id");

part3 = curl_mime_addpart(mime);
curl_mime_data(part3, "test", CURL_ZERO_TERMINATED);
curl_mime_name(part3, "client_ids");

//header issue
struct curl_slist *headers = NULL;
static const char buf[] = "Expect:";
string auth = "Authorization:Bearer ";
auth += token;
headers = curl_slist_append(headers, auth.c_str());
headers = curl_slist_append(headers, buf);

/* Post and send it. */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getFileInfo);
curl_easy_perform(curl);

/* Clean-up. */
curl_easy_cleanup(curl);
curl_mime_free(mime);

```

}
