当前位置: > Linux服务器 > nginx >

nginx上传文件模块

时间:2016-03-03 19:44来源:linux.it.net.cn 作者:IT

在Nginx网站的模块列表页中发现一个Nginx服务器的上传模块http://www.grid.net.ru/nginx/upload.en.html

该模块通过Nginx服务器来接受用户上传的文件,在Nginx接受完文件以后再转给后端的程序做处理。

它自动分析客户端的上传请求,将上传的文件保存到 upload_store 所指向的目录位置. 然后这些文件信息将被从原始的请求中剔除,重新组装好上传参数后转到后端由 upload_pass 指定的位置去处理,这样就可以任意处理上传的文件。
每一个上传的 file 字段值将可以由upload_set_form_field 指定的值替换. 文件的内容可以由$upload_tmp_path 变量读到或简单的移到其他位置. 将文件删除由 upload_cleanup 指定控制。
upload_set_form_field可以使用的几个变量

* $upload_field_name

原始的文件字段
* $upload_content_type

上传文件的类型
* $upload_file_name

客户端上传的原始文件名称
* $upload_tmp_path

上传的文件保存在服务端的位置

upload_aggregate_form_field 可以多使用的几个变量,文件接收完毕后生成的

* $upload_file_md5

文件的MD5校验值
* $upload_file_md5_uc

大写字母表示的MD5校验值
* $upload_file_sha1

文件的SHA1校验值
* $upload_file_sha1_uc

大写字母表示的SHA1校验值
* $upload_file_crc32

16进制表示的文件CRC32值
* $upload_file_size

文件大小

官方的设置举例

1.
# 上传表单应该提交到这个地址
2.
location /upload {
3.
# 将请求体转到这个位置
4.
upload_pass /test;
5.

6.
# 将上传的文件保存到这个目录下
7.
# 目录是被散列化的,应该存在子目录 0 1 2 3 4 5 6 7 8 9
8.
upload_store /tmp 1;
9.

10.
# 允许上传的文件被用户 user 只读
11.
upload_store_access user:r;
12.

13.
# 设置请求体的字段(添加自己后端处理的信息)
14.
upload_set_form_field “${upload_field_name}_name” $upload_file_name;
15.
upload_set_form_field “${upload_field_name}_content_type” $upload_content_type;
16.
upload_set_form_field “${upload_field_name}_path” $upload_tmp_path;
17.

18.
# 指示后端关于上传文件的md5值和文件大小
19.
upload_aggregate_form_field “${upload_field_name}_md5″ $upload_file_md5;
20.
upload_aggregate_form_field “${upload_field_name}_size” $upload_file_size;
21.

22.
# 指示原样转到后端的参数,可以正则表达式表示
23.
upload_pass_form_field “^submit$|^description$”;
24.
}
25.

26.
# 将请求转到后端的地址处理
27.
location /test {
28.
proxy_pass http://localhost:8080;
29.
}
30.
}

将模块添加到Nginx中的方法
下载源代码解压后
为nginx配置额外模块(需要重新编译):

1.
tar xvzf nginx_upload_module-2.0.7.tar.gz
2.
cd nginx631
3.
./configure –add-module=/usr/local/nginx_upload_module-2.0.7
4.
make
5.
make install

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容