如何在嵌入式Lua/Perl中访问(POST)来自nginx上传模块的参数?

我一直在尝试弄清楚如何从嵌入式 Perl(使用 nginx-perl)或 Lua(使用嵌入式 Lua 模块)中访问 nginx 上传模块的结果。我只能找到如何与 fastcgi(或类似的东西)一起使用该模块的示例,如果可能,我想避免使用它。

仅仅让 upload_pass 有一个 lua/perl 内容处理程序似乎行不通;因为请求正文在某种程度上被截断为仅仅第一行(是的,我已经告诉它等待请求正文,并确保它没有被写入文件)。

至少当使用 Perl 时(我没有尝试过 Lua,但我怀疑同样的问题将发生),如果通过 proxy_pass 到另一个 nginx 实例,则可以使用完整请求正文(如原始 multipart/form-data)。

我的问题有三个方面。首先,这是预期的行为/参数是如何传递的?其次,是否可以在不使用 perl/lua 库(在内容处理程序中重新)解析 multipart/form-data 的情况下访问上传模块的结果。

最后,如果不能实现后者,那么我能否使用 nginx/upload 使用的 multipart/form-data 解析器,而不是手动导出函数并使用某种形式的 FFI。

提前致谢。

点赞
用户661232
用户661232

使用lua,通过如下方法可以获取普通参数:

ngx.req.read_body()
local inputjson = ngx.req.get_body_data()

有关post参数的文档:http://wiki.nginx.org/HttpLuaModule#ngx.req.get_post_args

常规变量:

ngx.var.my_var

Lua Nginx模块文档很详细:http://wiki.nginx.org/HttpLuaModule

上传模块文档中记录的变量:http://www.grid.net.ru/nginx/upload.en.html

可以通过以下方式访问:

ngx.var.upload_field_name.path

只需在变量上进行日志记录或打印以进行验证。

2012-06-16 21:53:25