1

我一直在试图弄清楚如何从嵌入式 perl(使用 nginx-perl)或 lua(使用嵌入式 lua 模块)访问 nginx 上传模块的结果。我只能找到如何将模块与 fastcgi(或类似)一起使用的示例,如果可能的话,我希望避免使用该模块。

简单地让 upload_pass 有一个 lua/perl 内容处理程序似乎不起作用;正文以某种方式被截断为第一行(是的,我已经告诉它等待正文并确保它没有写入文件)。

至少在使用 Perl 时(我没有尝试过 Lua,但我怀疑会发生同样的事情),如果一个人对另一个 nginx 实例执行 proxy_pass,则可以使用完整的主体(作为原始多部分/表单数据) .

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

最后,如果后者不可行,我可以使用 nginx/upload 使用的 multipart/form-data 解析器,而无需手动导出函数并使用某种形式的 FFI。

提前致谢。

4

1 回答 1

0

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

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

对于记录的帖子参数: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

upload_set_form_field $upload_field_name.name "$upload_file_name";
upload_set_form_field $upload_field_name.content_type "$upload_content_type";
upload_set_form_field $upload_field_name.path "$upload_tmp_path";

应该可以通过以下方式访问:

ngx.var.upload_field_name.path

只需在 var 上做一个日志或打印来验证

于 2012-06-16T21:53:25.223 回答