简介
为nginx服务器编写的一个上传模块,能够处理传统mutipart/form-data的上传,同时支持断点续传。

为什么要使用upload module

1.简单:使用上传模块,开发中不需要再处理文件的写入,只需要在nginx配置文件中增加几行,即可实现上传的功能。

2.可靠:上传模块目前版本为2.2.0,已经相当稳定。

3.功能强大:支持断点续传。

使用upload module配置指令说明
upload_pass

文件上传结束后代理到的地址,同时将文件信息传递给此地址。

upload_resumble

是否开启续传,默认关闭

upload_store

上传文件的存放位置,文件存放路径被hash到子目录中,注意nginx不会自动创建子目录,必须使用前创建,否则会报错

upload_state_store

断点续传状态文件的存放位置,如果不配置,会与文件hash存放到一个目录下,名称为文件名.state,同上传目录一样,使用前必须创建子目录

upload_store_access

nginx user对上传文件的读写权限,默认同时拥有读写权限

upload_set_form_field

声名传递到后台的参数名和值,一个文件可使用的属性如下。

$upload_field_name:上传表单中文件所属的input输入框的name属性

$upload_content_type:文件类型

$upload_file_name:文件名

$upload_tmp_path:文件的存放路径

upload_aggregate_form_field

与upload_set_form_field指令类似,将文件上传结束后的属性传递到后台,可使用的属性如下。

$upload_file_md5:文件的md5sum值

$upload_file_md5_uc:大写形式的文件md5sum值

$upload_file_sha1:文件的sha1 sum值

$upload_file_sha1_uc:大写形式的文件sha1 sum值

$upload_file_crc32:16进制的CRC32文件校验码

$upload_file_size:文件大小,单位为bytes

$upload_file_number:文件体在请求体中的序号

upload_pass_form_field

声名被传递到后台的原表单字段,使用正则表达式

upload_cleanup

声名后台返回什么状态码时,nginx需要删除上传文件,状态码必须在400~500之间

upload_max_part_header_len

声名最大的http头长度,即buffer size

upload_max_file_size

声名允许上传的文件大小限制,官方文档解释为“软”限制,即超过此大小的文件仍将被接收,而client_max_body_size为“硬”限制。值为零表示无大小限制。

upload_limit_rate

声名最大的上传速度,0表示无限制

upload_max_output_body_len

声名最大的输出body大小,防止非file类型的输入堆积到memory,0表示无限制

upload_tame_array

参数名中的中括号是否被丢掉

配置实例

处理上传的路径为:/nginx-upload,此地址为上传表单的提交地址

文件上传完成后,nginx会将请求代理到后端,本例中为自定义的location upload,代理到的地址还是/nginx-upload,当然可以使用rewrite指令代理到例外一个地址。

后台会接收到的参数名和值自定义,在本例子中分别为name,content_type, path, md5, size, submit 和description

 



location ~* /nginx-upload {  
    upload_pass @upload;  
    upload_store /opt/tmp/uploads 1;  
    upload_resumable on;  
    upload_set_form_field name "$upload_file_name";  
    upload_set_form_field content_type "$upload_content_type";  
    upload_set_form_field path "$upload_tmp_path";  
    upload_aggregate_form_field "md5" "$upload_file_md5";  
    upload_aggregate_form_field "size" "$upload_file_size";  
    upload_pass_form_field "^submit$|^description$";  
    upload_cleanup 400 404 499 500-505;  
}  
location @upload {  
        proxy_pass http://web;  
}