Openresty(十九)使用upload上传文件

一    模块地址

(1)源码解读

1)  lualib/resty/upload.lua 源码

2)  该模块在解析文件'上传请求'的过程中,主要采用了简单的类似"有限状态机的算法"来实现的

3)  在'不同的状态'由相应的 handler 进行处理,支持的状态包括如下4 个handler状态:

state_handlers = {
    read_preamble,
    read_header,
    read_body_part,
    eof
}

+++++++++++++++"四个状态详细解释"+++++++++++++++

1)  STATE_BEGIN,"初始状态",是在 upload:new 实例化的时候'初始化'的;

2)  STATE_READING_HEADER,开始'解析 HTTP 头部消息'

备注:一般在这个阶段主要用于'解析'出其中的'文件名'、boundary 等信息,相应的 handler 为 read_header;

3)  STATE_READING_BODY,开始解析 'HTTP 包体',这个阶段就是'读取文件内容';

4)  STATE_EOF,如果文件全部都'解析'和'读取'完后,则进入该状态,一般这个阶段表示文件都已经'读取'完;

注意:在'不同'阶段/状态下 read 返回的结构不同

例如:在 STATE_READING_HEADER 下返回的"结构"是 "header",{ key, value, line}

 二    操作

(1)upload.lua代码

Openresty(十九)使用upload上传文件_第1张图片

Openresty(十九)使用upload上传文件_第2张图片 Openresty(十九)使用upload上传文件_第3张图片

通过lua-resty-upload实现文件上传的例子

(2)nginx.conf配置文件

Openresty(十九)使用upload上传文件_第4张图片
io.open 

参考

(3)测试一

Openresty(十九)使用upload上传文件_第5张图片

(4)测试二

要求:客户端提交的'表单' enctype="multipart/form-data",method="POST"

Openresty(十九)使用upload上传文件_第6张图片

Openresty(十九)使用upload上传文件_第7张图片

Openresty(十九)使用upload上传文件_第8张图片

Openresty(十九)使用upload上传文件_第9张图片

三    上传失败限制 

(1)保存目录权限问题

(2)上传文件太大

报错:413 Request Entity Too Large [请求实体太大]

原因:超过了nginx配置的'上传文件大小限制'导致的

client_max_body_size 100m;  --> 默认大小为'1M'

你可能感兴趣的:(Openresty,html5,html,css)