天天看點

用libcurl庫POST上傳圖檔 用表單方式

int curl_post_jpg(char *file_path)

{

    int ret;

    char ip[32];

    int port;

    char url[256] = {0};

    sprintf(url,"http://test.server.net/post.php?name=test");

    printf("url :%s\n", url);

    ret = get_jpg_data(file_path);

    jpg_data *pic = p_jpg_data;

    if (NULL == pic || NULL == pic->data)

    {

        printf("post data is null\n");

        return -1;

    }

    const char *data = pic->data;

    int len = pic->size;

    CURL *curl = curl_easy_init();

    curl_mime *mime;

    curl_mimepart *part;

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);                //開啟/關閉 列印調試詳細資訊模式

    curl_easy_setopt(curl, CURLOPT_URL, url);                    //提供要在請求中使用的URL

    curl_easy_setopt(curl, CURLOPT_TIMEOUT,10L);                //設定上傳超市時間10s

    mime = curl_mime_init(curl);

    part = curl_mime_addpart(mime);   

    curl_mime_data(part, data, len);

    curl_mime_name(part, "xxx");

    curl_mime_filename(part, "xxx.jpg");

    curl_mime_type(part, "application/octet-stream"); 

    curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);

    printf("start save result:\n");

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

    curl_easy_setopt(curl, CURLOPT_WRITEDATA, NULL);            //傳遞給write回調的自定義指針

    printf("end save result !\n");

    CURLcode code = curl_easy_perform(curl);

    if (code == CURLE_OK)

    {

        printf("perform successful\n");

        ret = 0;

    }else{

        printf("perform failed\n");

        ret = -1;

    }

    curl_easy_cleanup(curl);

    curl_mime_free(mime);

    if(p_jpg_data)

    {

        free(p_jpg_data);

        p_jpg_data = NULL;

    }

    return ret;

}