C++でCurlを使い画像と連想配列をPOSTする方法

前提

クライアント:C++(linux)
サーバ:apache php

実現したいこと

連想配列を送れているのですが、このコードに追記するかたちで同時に画像データもPOSTしたいです。

また別で、curlを使わずに画像をpostしてサーバ側で受け取り任意の名前でファイル保存することはできています。
もちろん$_FILESを出力してみると、name,type,tmp_name,error,sizeが表示されています。
その際サイトは以下の下のほうにある"C言語でPOSTしてバイナリデータをアップロード"という記事を参考にしました
http://sdlabo.org/index.php

ソースコード

main.cpp

size_t getSize(char *ptr, size_t size, size_t mem, string *stream) { int si = size * mem; stream->append(ptr, si); return si; } int main(int argc, char *argv[]) {  CURL *curl;  CURLcode res;  string chunk;  curl = curl_easy_init();  if(curl)  {   struct curl_slist *_headers = NULL;   _headers = curl_slist_append(_headers, "Content-Type: application/json");   curl_easy_setopt(curl, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/xxx/xxx.php");   curl_easy_setopt(curl, CURLOPT_POST, 1);   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata); //postdataは{"a":"b"}のような連想配列のjson文字列   curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(postdata));    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getSize);   curl_easy_setopt(curl, CURLOPT_WRITEDATA, (string *)&chunk);   res = curl_easy_perform(curl);   curl_easy_cleanup(curl);  }  return 0; }

これでphp側でリクエストデータを確認すると、{"a":"b"}のように出力ができている状態です。

{ "a" : "b" }

今のCurlを使ったソースに画像データも追加してサーバ側で以下のように受け取れるようにしたいです。

{ "a" : "b", "image": [ { "name": "xxxxx",      "type" "xxxxx":,      tmp_name : "C:\Windows\Temp\xxx.tmp",      "error": "0"      "size": "100" } ] }

コメントを投稿

0 コメント