Lua读取带有特定头的分块请求正文

我们使用Nginx + Lua并希望支持根据此解决方法进行分块上传,它通常有效。我的问题是我如何像往常一样处理上传请求-处理头,正文,eof:

                local form, err = upload:new(chunk_size)
                if not form then
                    ngx.log(ngx.ERR, "failed to new upload: ", err)
                    ngx.exit(500)
                end

                form:set_timeout(1000) -- 1 sec

                while true do
                    local typ, res, err = form:read()
                    if not typ then
                        ngx.say("failed to read: ", err)
                        return
                    end

                    ngx.say("read: ", cjson.encode({typ, res}))

                    if typ == "eof" then
                        break
                    end
                end

只有当我有分块上传头-H“Transfer-Encoding:chunked”时,才使用chunk脚本。

抱歉,如果这是一些明显的东西,但我在谷歌了几天后没有看到任何示例。但是我的建议是:

# 读取头
ngx.req.get_headers()

#读取正文:
ngx.req.get_body_data()

然后我不需要form:read()并迭代表格数组直到eof。感激任何链接,示例。

curl示例:

curl -X PUT localhost:8080/test -F file=@./myfile -H "Transfer-Encoding: chunked"
点赞
用户9783845
用户9783845

在之前的回答中,我提到:

我们可以修改 lua-resty-upload 以接受类似 socket 的对象而不是硬编码的对象,并编写一些缓冲器,它可以从迭代器中懒惰地读取字节并提供 socket 的界面。

这件事已经完成了。我已经创建了一个名为 lua-buffet 的新库。它可以用来创建像普通的 ngx_lua 协程套接字对象般的对象。尽管现在还没有实现所有的套接字方法,但目前它已经具备了 lua-resty-upload 所需要的所有方法。它还没有正式发布,但我很快就会发布第一个版本。

我还 fork 并修改了 lua-resty-upload 以添加套接字参数。稍后我会向上游仓库提交 Pull Request。

这里有一个处理你的情况的示例:https://github.com/un-def/lua-buffet/tree/master/examples/resty-chunked-formdata

2020-06-11 15:37:23