分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Openresty + nginx-upload-module支持文件上传

发布时间:2023-09-06 01:54责任编辑:林大明关键词:nginxupload文件上传

1. 包下载

openresty-1.13.6.1下载地址 https://openresty.org/download/openresty-1.13.6.1.tar.gz

nginx-upload-module-2.2由于原作者已经很长时间不更新了,本来从原作者github下载的时候,编译openresty的时候报错:ngx_http_upload_module.c:14:17: fatal error: md5.h: No such file or directory

后来找到一个可用的fork版本https://github.com/Austinb/nginx-upload-module

2. 编译

(1)分别解压openresty-1.13.6.1.tar.gz和nginx-upload-module-2.2.zip

(2)执行/sdf/slb/openresty-1.13.6.1# ./configure --prefix=/sdf/slb/openresty --add-module=/sdf/slb/nginx_upload_module-2.2.0

3. 配置

3.1 nginx.conf 

需要配置upload_pass作为文件上传之后的返回处理,我们本次使用的是golang写的一个简单http服务。

worker_processes ?20;error_log ?logs/error.log notice;events { ???worker_connections ?1024;}http { ???include ??????mime.types; ???default_type ?application/octet-stream; ???server { ???????listen ??????8081; ???????client_max_body_size 100m; ???????# Upload form should be submitted to this location ???????location /upload {文件上传的action ???????????# Pass altered request body to this location ???????????upload_pass /test/my;文件上传之后的返回 ???????????# Store files to this directory ???????????# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist ???????????upload_store /sdf/slb/store 1;文件存储的路径,要先手动创建0 1 2 3 4 5 6 7 8 9一共10个文件夹 ???????????????????????# Allow uploaded files to be read only by user ???????????upload_store_access user:rw; ???????????# Set specified fields in request body ???????????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; ???????????# Inform backend about hash and size of a file ???????????upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5; ???????????upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size; ???????????upload_pass_form_field "^submit$|^description$"; ???????} ???????# Pass altered request body to a backend ???????????????location /test/my { ???????????proxy_pass http://192.168.25.84:50000;本地一个服务 ???????} ???????location /site { ???????????root ??html; ???????????index ?upload.html;支持文件上传的静态页面 ???????} ???}}

本地服务test.go的源代码,运行方式nohup go run test.go &,将启动一个http://127.0.0.1:50000的服务,其中包括一个/test/my的接口,返回upload success字符串。

// test project test.gopackage mainimport ("io""log""net/http")func my(w http.ResponseWriter, r *http.Request) {io.WriteString(w, "upload success")}func main() {http.HandleFunc("/test/my", my)err := http.ListenAndServe(":50000", nil)if err != nil {log.Fatal("Listen Server: ", err.Error())}}

 

3.2 配置静态页面访问,作为文件上传的入口

搭建openresty静态页面访问,请参考http://www.cnblogs.com/lujiango/p/9001006.html#_lab2_4_0

upload.html的文件内容如下:请注意其中的action="/upload",与nginx.conf里面的location /upload{}是对应的。

<html><head><title>Test upload</title></head><body><h2>Select files to upload</h2><form enctype="multipart/form-data" action="/upload" method="post"><input type="file" name="file1"><br><input type="file" name="file2"><br><input type="file" name="file3"><br><input type="file" name="file4"><br><input type="file" name="file5"><br><input type="file" name="file6"><br><input type="submit" name="submit" value="Upload"><input type="hidden" name="test" value="value"></form></body></html>  

页面如下:

3.3 文件上传

访问http:192.168.25.84:8081/site或http:192.168.25.84:8081/site/upload.html

可以进入文件上传的入口页面,选择文件上传即可,如下是文件上传成功。

此时,在nginx.conf配置的文件存储位置有如下文件:

其中的0000000010和0000000020就是上传的文件。

注:在上传文件的时候报错:/sdf/slb/store/6/0000000006" for "89629.log" (13: Permission denied),这个是nginx权限的问题,可以参考https://www.ruby-forum.com/topic/1379755

x. 参考资料

https://www.ruby-forum.com/topic/1379755

http://www.grid.net.ru/nginx/upload.en.html

https://github.com/Austinb/nginx-upload-module/blob/2.2/nginx.conf

Openresty + nginx-upload-module支持文件上传

原文地址:https://www.cnblogs.com/lujiango/p/9051650.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved