对于一个请求而言...可以从header里面拿到content-length的吧...这个就知道请求的大小了!
对于get 请求,不是直接可以从ngx.var中拿到参数的值....
对于post请求,才需要自己手动去read吧.....
我现在的项目里也有文件上传的操作.....
做法和章哥说的一样...具体实现是:
1.上传头像的场景 . POST
现在的做法,实用resty.upload 拿到上传的图片,写入到本地文件.. 在resty.http POST文件到后端的 weedfs 小文件存储系统 这个是之前的做法.
改进做法, 从请求中得到文件的实际数据流发送到后端的http存储服务,返回文件id给客户端.
改进做法, 直接在请求中,拨开含有数据流的内容,拼装成一个新的http请求,转发到后端...
想尝试下,章哥说的socket发送到后端的做法......... 关键还在于后端实用的存储系统的接收方式.
现在在测试改进的后2种做法....这些都是在 nginx.conf中配置post的大小到自己需要的大小,可以直接实用内存而避免io操作......
其实用ngx_lua的优势其实主要是想把东西都放到内存中操作,实现非阻塞...不然和其他的httpserver就没有啥区别了....
2.大文件上传,基本我现在的项目中..都是通过 上传文件块来实现的... 这样可以断点续传...
post文件的 md5, filename, file_body, range: 0-8k 的做法....