如何使用libcurl将图片上传到最重要的服务器?

尝试构建一个C ++应用程序以将图像上传到最重要的服务器(版本5.14.0)。并且我已经使用我的C ++代码获得了访问令牌,通道ID。但是我无法使用libcurl上传图像。 这是我的CPP代码(现在使用libcurl):

void uploadPicture(string url,string channelId,string path,string fileName,string token)
{
    url += "/api/v4/files";

    CURL *curl;

    struct curl_httppost *formpost = NULL;
    struct curl_httppost *lastptr = NULL;

    curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME,"files",CURLFORM_FILE,path.c_str(),CURLFORM_FILENAME,"test.jpg",CURLFORM_CONTENTTYPE,"image/jpeg",CURLFORM_END);

    curl_formadd(&formpost,"client_ids",CURLFORM_COPYCONTENTS,"channel_id",channelId.c_str(),CURLFORM_END);

    struct curl_slist *headers = NULL;

    string auth = "Authorization:Bearer ";
    auth += token;
    headers = curl_slist_append(headers,"Content-Type:multipart/form-data");
    headers = curl_slist_append(headers,auth.c_str());
    CURLcode res;
    curl = curl_easy_init();

    if (curl)
    {
        res = curl_easy_setopt(curl,CURLOPT_URL,url.c_str());         
        res = curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);      
        res = curl_easy_setopt(curl,CURLOPT_HTTPPOST,formpost);         
        res = curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,getFileInfo);
        res = curl_easy_setopt(curl,CURLOPT_POST,1);                
        res = curl_easy_perform(curl);  
        if (res != 0)
        {
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
    }

}

但是它不起作用...请告诉我问题出在哪里。

aa4568213 回答:如何使用libcurl将图片上传到最重要的服务器?

最后,我找到了解决方法:

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 */
    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);
}
本文链接:https://www.f2er.com/3161485.html

大家都在问