• 中文交流区
  • lua-resty-upload接收上传文件中间处理后如何再上传到真正的服务器

新接触这个工具,有个上传下载文件的需求,和以前的帖子 【
https://forum.openresty.us/d/1699-6263d824b67a7d8e42e9c4b3def3263b 上传图片的功能,需要将图片传到redis中(其实是ssdb)】有点类似
参考这个使用的lua-resty-upload,可以获取到内容了
现在想把图片做个处理再发到真正的服务器上【和nginx upstream类似】,各位大佬,这个该怎么处理?

-- https://blog.csdn.net/u013412772/article/details/78626402

--从环境变量LUA_PATH中搜索lua文件
package.path = '../lualib/resty/?.lua;'
--从LUA_CPATH中搜索C文件
package.cpath = '../lualib/?.so;'

local function get_filename(res)
local filename = ngx.re.match(res,'(.+)filename="(.+)"(.*)')
if filename then
return filename[2]
end
end

local function upload()
local upload = require("upload")
local chunk_size = 4096

local form, err = upload:new(nil,chunk_size,chunk_size)  
if not form then 
    ngx.log(ngx.ERR, "failed to new upload: ", err)
    ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end

local file  
local filelen=0  
local filename 
local i=0  

form:set_timeout(0)
while true do  
    local typ, res, err = form:read()  
    if not typ then  
        ngx.say("failed to read: ", err)  
        return  
    end  
    if typ == "header" then  
        if res[1] ~= "Content-Type" then  
            filename = get_filename(res[2])  
            ngx.log(ngx.DEBUG, "filename: " .. filename)
            if filename then  
                i=i+1  
   
                file = io.open(filename,"w+")  
                if not file then  
                    ngx.say("failed to open file ")  
                    return  
                end  
            else  
            end  
        end  
    elseif typ == "body" then  
        if file then  
            filelen= filelen + tonumber(string.len(res))      
            file:write(res)  
        else  
        end  
    elseif typ == "part_end" then  
        if file then  
            file:close() 
            file = nil
            ngx.log(ngx.DEBUG, "part_end done")
            --调用agent的bat脚本,并用agent的返回值代替下面say的内容
            --local result = io.popen('test.bat')
            --local returnValue = result:read("*all")
            --ngx.say(returnValue)
        end  
    elseif typ == "eof" then  
        break  
    else  
    end  
end

if i==0 then  
    ngx.say("please upload at least one file!")  
    return  
end 

ngx.log(ngx.DEBUG, "up done: ")

end

--开始调用上传文件脚本
ngx.log(ngx.DEBUG, "-------------start execute upload_package lua script--------------")
local request_method = ngx.var.request_method
if "POST" == request_method then
upload()
end
ngx.log(ngx.DEBUG, "-------------end execute upload_package lua script--------------")

比如拿到这个文件内容,加些水印之类,通过lua直接上传到真正的服务器上呢?

多谢!!!

    15 days later
    6 days later
    Write a Reply...