Files
resty_functions/scripts/lib/upyun_upload.lua
T

74 lines
2.3 KiB
Lua
Raw Normal View History

2022-02-08 00:25:20 +08:00
-- 指定模块引用目录,否则无法加载同目录下的其他文件
2022-02-08 13:57:15 +08:00
--package.path = package.path .. ';/usr/local/opt/openresty/nginx/scripts/?.lua';
2022-02-08 14:14:57 +08:00
package.path = package.path .. ';<SCRIPT_PATH>/?.lua';
2022-02-08 00:25:20 +08:00
local upyun_upload = {}
2023-07-23 23:09:13 +08:00
local json = require("cjson")
2023-05-08 00:45:53 +08:00
local strip_path = require("lib.strip_path")
local Upyun = require('lib.upyun')
2022-02-08 00:25:20 +08:00
2023-07-23 23:09:13 +08:00
function upyun_upload.upload(filepath, filename, retry)
2022-02-08 00:25:20 +08:00
2023-08-09 19:15:18 +08:00
if retry == nil then
retry = 1
end
2023-07-23 23:09:13 +08:00
if retry > 3 then
ngx.log(ngx.ERR, "failed to upload file : reach max retries")
else
local upyun, err = Upyun:new({
user = ngx.var.upyun_operator,
passwd = ngx.var.upyun_password,
localFilePath = filepath
})
2022-02-08 00:25:20 +08:00
2023-07-23 23:09:13 +08:00
if not upyun then
ngx.status = 500
ngx.log(ngx.ERR, "failed to initialize upyun: " .. err)
return
end
2023-01-17 19:39:08 +08:00
2023-07-23 23:09:13 +08:00
local bucket = ngx.var.upyun_bucket
local directory = ngx.var.upyun_directory
if not filename then
filename = strip_path.strip_path(filepath)
end
2022-02-08 00:25:20 +08:00
2023-07-23 23:09:13 +08:00
ngx.log(ngx.INFO, 'bucket -> ', bucket)
ngx.log(ngx.INFO, 'directory -> ', directory)
2023-07-23 21:38:56 +08:00
2023-07-23 23:09:13 +08:00
local savePath = bucket .. "/" .. directory .. "/" .. filename
ngx.log(ngx.INFO, " savePath " , savePath)
local options = {
md5 = true
}
local info, err = upyun:upload_file(savePath, nil, options)
if not info then
local error_table = json.decode(err)
2023-07-23 23:21:32 +08:00
ngx.log(ngx.INFO, "Upyun Upload File Error: " .. err)
2023-07-23 23:09:13 +08:00
ngx.log(ngx.ERR, '[' .. error_table["code"] .. ']')
if (error_table["code"] == 40000006)
then
ngx.status = 400
ngx.log(ngx.ERR, "Retry upload file : " .. '[' .. err .. ']')
upyun_upload.upload(filepath, filename, retry+1)
else
ngx.status = 400
ngx.log(ngx.ERR, "failed to upload file : " .. '[' .. err .. ']')
end
else
ngx.status = 200
local fullpath = ngx.var.upyun_domain .. "/" .. directory .. "/" .. filename
ngx.log(ngx.INFO, "SUCCESS UPLOAD -> UPYUN URL -> ", fullpath)
ngx.say(fullpath)
end
2022-02-08 00:25:20 +08:00
end
2023-07-23 23:09:13 +08:00
2022-02-08 00:25:20 +08:00
end
return upyun_upload