博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openresty配置文件上传下载
阅读量:6245 次
发布时间:2019-06-22

本文共 3679 字,大约阅读时间需要 12 分钟。

1. 下载包安装Openresty

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

安装请自行百度。

2. 配置

2.1 nginx.conf 

user root;worker_processes  20;error_log  logs/error.log notice;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    server {        listen       8082;        server_name  localhost;        # 最大允许上传的文件大小        client_max_body_size 200m;                       location / {            root   html;            index  index.html index.htm;        }        set $store_dir "/sdf/slb/openresty/nginx/html/download/"; # 文件存储路径        # 文件上传接口:http://xxx:8082/upfile        location /upfile {             content_by_lua_file conf/lua/upload.lua; # 实现文件上传的逻辑        }        # 文件下载入口: http://xxx:8082/download        location /download {            autoindex on;            autoindex_localtime on;            root   html;            index  index.html;        }        # redirect server error pages to the static page /50x.html        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}

  

 

2.2 upload.lua(文件位于conf/lua/upload.lua)

 

-- upload.lua--==========================================-- 文件上传--==========================================local upload = require "resty.upload"local cjson = require "cjson"local chunk_size = 4096local form, err = upload:new(chunk_size)if not form then    ngx.log(ngx.ERR, "failed to new upload: ", err)    ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)endform:set_timeout(1000)-- 字符串 split 分割string.split = function(s, p)    local rt= {}    string.gsub(s, '[^'..p..']+', function(w) table.insert(rt, w) end )    return rtend-- 支持字符串前后 trimstring.trim = function(s)    return (s:gsub("^%s*(.-)%s*$", "%1"))end-- 文件保存的根路径local saveRootPath = ngx.var.store_dir-- 保存的文件对象local fileToSave--文件是否成功保存local ret_save = falsewhile true do    local typ, res, err = form:read()    if not typ then        ngx.say("failed to read: ", err)        return    end    if typ == "header" then        -- 开始读取 http header        -- 解析出本次上传的文件名        local key = res[1]        local value = res[2]        if key == "Content-Disposition" then            -- 解析出本次上传的文件名            -- form-data; name="testFileName"; filename="testfile.txt"            local kvlist = string.split(value, ';')            for _, kv in ipairs(kvlist) do                local seg = string.trim(kv)                if seg:find("filename") then                    local kvfile = string.split(seg, "=")                    local filename = string.sub(kvfile[2], 2, -2)                    if filename then                        fileToSave = io.open(saveRootPath .. filename, "w+")                        if not fileToSave then                            ngx.say("failed to open file ", filename)                            return                        end                        break                    end                end            end        end    elseif typ == "body" then        -- 开始读取 http body        if fileToSave then            fileToSave:write(res)        end    elseif typ == "part_end" then        -- 文件写结束,关闭文件        if fileToSave then            fileToSave:close()            fileToSave = nil        end                ret_save = true    elseif typ == "eof" then        -- 文件读取结束        break    else        ngx.log(ngx.INFO, "do other things")    endendif ret_save then    ngx.say("save file ok")end

  

3. 测试

3.1 启动openresty

sbin/nginx

3.2 上传文件

通过地址http://192.168.23.65:8082/upfile上传文件。

 

 3.3 下载文件

通过http://192.168.23.65:8082/download下载文件。

x. 参考资料

http://www.codexiu.cn/nginx/blog/11024/

 

转载于:https://www.cnblogs.com/lujiango/p/9056680.html

你可能感兴趣的文章
cocos2dx学习
查看>>
http加密访问应用
查看>>
vlayout
查看>>
必读 | 什么时候开始准备2019年下半年的考试?
查看>>
JDK安装说明
查看>>
iftop-流量监控安装(脚本)
查看>>
Windows Server2008通过命令行方式添加防火墙规则
查看>>
我的友情链接
查看>>
2013年十大IT趋势预测
查看>>
用PySpider搜集2017年高校招生章程
查看>>
centos知识点巩固
查看>>
如何用scapy针对无线网络
查看>>
使用BeanNameAutoProxyCreator实现方法日志代理
查看>>
我的友情链接
查看>>
javascript变量的作用域
查看>>
CakePHP 2.x CookBook 中文版 第七章 模型 之 保存数据(二)
查看>>
第8章 三路由不同网段互通实验(中级篇)
查看>>
【啊哈!算法】最快最简单的排序——桶排序
查看>>
运城数据恢复注册了一个网站
查看>>
shell脚本菜
查看>>