OpenRestyのngx.req.get_body_dataがnilになる問題
夏なのでOpenRestyを始めました。
Postで送られてくるデータを元に色々するためにngx.req.get_body_data()を使っていたのですが、
返り値がちょくちょくnilになる問題が発生しました。
ちょっと調べてみたところ、データサイズがclient_body_buffer_size(デフォルト8K or 16K?)を超えていた場合はデータがメモリに乗らずtmpファイルに書かれるようです。そのためngx.req.get_body_data()では取れなくなり、ngx.req.get_body_file()を代わりに使うとデータが取れるようになります。
簡単なサンプルコード置いておきます。
ngx.req.read_body() local body_data = ngx.req.get_body_data() if body_data == nil then local body_data_file = ngx.req.get_body_file() local fh, msg = io.open(body_data_file, "r") if fh then body_data = fh:read("*a") fh:close() if body_data == nil then --some error handling end else --some error handling end end
以上です。Luaは便利なんですが、Cもちゃんと書けるようになりたいですね。