以前の例ではformリクエストに載った画像ファイルを扱いました。
ただ、送信デバイスの都合によっては直接データを叩きつけるような奴もあります。
この場合は、どうしたらいいのでしょうか?
実際のところ
esp8266で以下のように指定URLに対し直接画像を叩き込むようなモノがあったとします。
String camera_get_data_p(const String &post_url) { String line = ""; HttpClient client; camera_get_data(&client, [](void *ctx, uint32_t sz){ HttpClient &client = *(HttpClient*)ctx; client.setHeader("Content-Type", "image/jpeg"); client.setContentLength(sz); HttpResponse res = client.post_start(POST_URL); }, [](void *ctx, uint8_t *buf, uint16_t len){ HttpClient &client = *(HttpClient*)ctx; if (client.connected()) { client.write(static_cast<const uint8_t*>(buf), len); } }); client.flush(); return "sucess"; }
これを受けるbottleの受け手は以下の通り。
"Content-Type image/jpeg"なデータはrequestのbodyに入っています。
ただ、ここデータ型はストリームタイプなので、適宜捕まえてファイル化して保存しないといけません。
@post('/img') def receiveImg(): timestump = strftime('%m%d%H%M%S') upload = request.body with open("/tmp/img/" + timestump + ".jpeg", 'wb') as f: f.write(upload.read()) return "" + timestump + ".jpeg" + "\r\n"