来源:未知 时间:2015-06-20 10:46 作者:xxadmin 阅读:次
[导读] 一.nginx_upload_module使用 背景 利用nginx上传模块Nginx_upload_module可更有效实现大文件断点续传,还可安装nginx-upload-progress-module扩展显示文件上传进度。 二.nginx_upload_module工作原理 Nginx_upl...
一.nginx_upload_module使用背景
/usr/local/nginx/sbin/nginx -V
(2).下载nginx_upload_module
wget https://github.com/hongzhidao/nginx-upload-module/archive/master.zip
unzip master.zip
(3).进入nginx源码目录,重新编译安装nginx,并添加nginx_upload_module编译选项
--add-module=/模块源代码路径/nginx_upload_module
(4).配置nginx上传模块 在server的上下文中添加配置信息:
location /upload {
upload_pass /upload.php;#上传完成后端接受处理文件
upload_store /data/uptmp;#上传文件夹
upload_limit_rate 1024k;# 限制上传速度
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;#上传到的路径
upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;#md5
upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;#文件大小
upload_pass_form_field "^submit$|^description$";
#如果希望把所有的表单字段都传给后端可以用upload_pass_form_field "^.*$";
}
四.nginx_upload_module配置参数(详情可见官方文档) syntax: upload_pass <location> default: none severity: mandatory context: server, location 指定传输请求到后端的服务器。文件字段将会被重新组织,包括处理文件的必要信息。 syntax: upload_resumable <on/off> default: off severity: mandatory context: main, server, location 启用断点续传 syntax: upload_store <directory> [<level 1> [<level 2> ] ... ] default: none severity: mandatory context: server, location 指定上传文件保存的目录。目录可以被散列化,启动nginx之前,所有的子目录都必须已经存在。 syntax: upload_state_store <directory> [<level 1> [<level 2> ] ... ] default: none severity: optional context: server, location 指定断点续传文件所包含的状态文件的目录,目录可以被散列化,启动nginx之前,所有的子目录都必须已经存在。 syntax: upload_store_access <mode> default: user:rw severity: optional context: server, location 指定上传文件的权限模式。 syntax: upload_set_form_field <name> <value> default: none severity: optional context: server, location 在请求体中指定要生成的每个上传文件的表单字段,字段名和字段值可以包含在下列变量中。
这些变量只会在处理部分请求体的时候被校验,例如: 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"; syntax: upload_aggregate_form_field <name> <value> default: none severity: optional context: server, location 指定表单的字段名和字段值, 字段名和字段值可以包含nginx标准的变量,变量由 upload_set_form_field 指定或者使用下面这些变量:
上面指定的字段值只会在文件成功上传完毕后才会被计算,因此这些变量仅仅在最后一个请求体上传完毕后才会被校验。 警告: 变量 $upload_file_md5, $upload_file_md5_uc, $upload_file_sha1 和 $upload_file_sha1_uc 会耗用更多的资源来计算 MD5 和 SHA1 校验。 example: upload_aggregate_form_field $upload_field_name.md5 "$upload_file_md5"; upload_aggregate_form_field $upload_field_name.size "$upload_file_size"; syntax: upload_pass_form_field <regex> default: none severity: optional context: server, location 给字段名指定一个正则表达式,这将会被转发到后端服务器,每个指令都可以设置多个匹配模式。只要碰到了匹配的模式, 指令就会被立刻转发到后端服务器,如果是PCRE不能识别的模式,则会进行精确匹配字段名,匹配了则转发到后端服务器,如果指令被忽略,则不会转发到后端服务器。 例如: upload_pass_form_field "^submit$|^description$"; PCRE-不能识别的情况: upload_pass_form_field "submit"; upload_pass_form_field "description"; syntax: upload_cleanup <HTTP status/range> [<HTTP status/range>...] default: none severity: optional context: server, location 指定当每一个文件都上传成功后的HTTP的状态,用于后端服务器失败后的清理,当后端服务器由于某种原因不需要上传文件时,后端服务器也可能会直接返回错误代码,HTTP的状态必须是一个数字,范围在400---599之间,可以指定一个破折号范围的状态。 例如: upload_cleanup 400 404 499 500-505; syntax: upload_buffer_size <size> default: size of memory page in bytes severity: optional context: server, location 设置写缓冲区的尺寸,被用来累积文件数据,然后一次性写入硬盘。该值的使用是用来提高内存的使用效率和优化系统调用次数。 syntax: upload_max_part_header_len <size> default: 512 severity: optional context: server, location 指定头的最大长度,单位为bytes,该值被用来累积保存头的缓冲区大小。 syntax: upload_max_file_size <size> default: off severity: optional context: main, server, location 指定文件的最大尺寸。 文件长度超过该值将会被忽略。该指令是一个软限制,当碰到文件长度超过指定的最大值时,nginx也会继续接收处理请求体。如果要让该值必须起作用,需要通过client_max_body_size的硬限制来设置。该值设置为0,代表没有任何限制。 syntax: upload_limit_rate <rate> default: 0 severity: optional context: main, server, location 指定上传速率,单位为bytes/秒,0代表速率无限制。 syntax: upload_max_output_body_len <size> default: 100k severity: optional context: main, server, location 指定输出体的最大长度。这将会避免非文件表单数据占用内存。超过该值,将会返回413错误,代表请求体太大,该值为0,代表无限制。 syntax: upload_tame_arrays <on/off> default: off severity: optional context: main, server, location 指定在字段名中的方刮号是否被丢弃 (需要 PHP 数组).。 syntax: upload_pass_args<on/off> default: off severity: optional context: main, server, location 允许转发请求参数, 该参数由upload_pass指定 无效的命名位置,例如: <form action="/upload?id=5"> ... location /upload { upload_pass /internal_upload; upload_pass_args on; } ... location /internal_upload { ... proxy_pass http://backend; } 在这个例子中,后端服务器得到的请求地址为 "/upload?id=5". 该例子中,如果 upload_pass_args 设置为off ,则后端服务器得到的请求地址为 "/upload". 五.nginx_upload_module实现代码: html代码:
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="file" name="myfile" />
<input type="submit" />
</form>
PHP代码:
print_r($_POST);
if (rename($_POST['myfile_path'], $_POST['myfile_name'])) {
echo 'ok';
}
/*
Array
(
[myfile_name] => psb (2).jpg
[myfile_content_type] => image/jpeg
[myfile_path] => /data/uptmp/0000000012
[myfile_md5] => 091fa303622a020dba0e57a5d36ca276
[myfile_size] => 18364
)
*/
转载请注明地址: http://www.phpddt.com/php/nginx_upload_module.html 尊重他人劳动成果就是尊重自己!
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com