2020年1月3日金曜日

libcurl を用いた画像のPOST(multipart/form-data or raw 形式)

libcurl を用いて画像をPOST(multipart/form-data or raw 形式)する例題です。

multipart/form-data にて Base64化された送信(CURL_PostFormMedia)と、バイナリ形式での送信(CURL_PostRawMedia)をそれぞれ切り替えて利用することが出来ます。
サーバー側の実装例も合わせて記載(CGIを実行する際の引数で受信する形式を切替)。

multipart/form-data で送信する際には、ファイルが埋め込まれたフィールド名(<input type="file" name="file" />)を送受信側で合わせる必要があります。
サーバー側の form 内に、<input type="file" name="file"> と記載されている場合には name で指定されている "file" というフィールドに画像データを埋め込んで送信する必要があります(下記実装例では、CURL_PostFormMedia 関数の引数 fdname で指定しています)。

サーバ側実装例(perl/cgi)

サーバー側では GET で画像ファイルをPOSTする form を表示し、自分自身に画像をPOSTする実装となっています。
また、このCGIに直接画像をPOSTする際には引数にて(postimage.cgi?name=sample.jpg&type=raw) と指定すればバイナリ形式での受信も可能となります。 実行結果