diff --git a/README.md b/README.md index 0eb255f..4a272ab 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ nameserver 183.60.83.19 [weli@moicen ~]$ ``` +使用上述nameserver的时候,请求upyun会提示no route to host错误,使用8.8.8.8偶尔也会出现 + put `upload.lua` into: ```bash diff --git a/conf/admin.conf b/conf/admin.conf index 0ed164e..8e508b6 100644 --- a/conf/admin.conf +++ b/conf/admin.conf @@ -14,6 +14,7 @@ server { set $htyuc "http://127.0.0.1:3000"; #htyuc host set $resty_loc "/usr/local/openresty"; set $convert "/usr/bin/convert"; + set $upyun_cdn "https://upyun.alchemy-studio.cn/"; location / { try_files $uri $uri/ /index.html; @@ -54,6 +55,10 @@ server { content_by_lua_file $resty_loc/nginx/scripts/convert_audio.lua; } + location /api/ngx/convert/test { + content_by_lua_file $resty_loc/nginx/scripts/test.lua; + } + location /api/v1/ws/ { proxy_pass http://127.0.0.1:3001/api/v1/ws/; } diff --git a/conf/music-room.conf b/conf/music-room.conf index 25b5dd5..7c855e5 100644 --- a/conf/music-room.conf +++ b/conf/music-room.conf @@ -19,8 +19,7 @@ server { set $upyun_password "NyJ51zRwFApY9Wo9EHJMrb8GI9YtvpVN"; set $upyun_bucket "huiwing"; set $upyun_directory "music-room"; - set $upyun_cdn "https://upyun.alchemy-studio.cn/music-room/"; - set $upyun_api "https://v2.api.upyun.com"; + set $upyun_cdn "https://upyun.alchemy-studio.cn/"; location / { try_files $uri $uri/ /index.html; diff --git a/scripts/convert_audio.lua b/scripts/convert_audio.lua index 455ad06..1338e4c 100644 --- a/scripts/convert_audio.lua +++ b/scripts/convert_audio.lua @@ -1,7 +1,11 @@ +-- 指定模块引用目录,否则无法加载同目录下的其他文件 +package.path = package.path .. ';/usr/local/openresty/nginx/scripts/?.lua'; local cjson = require "cjson" local uuid = require "resty.jit-uuid" local http = require "resty.http" -local upyun_token = require('upyun_token') +local strip_path = require("strip_path") +local Upyun = require('upyun') + local TaskTypes = { @@ -24,7 +28,7 @@ local function get_access_token() ngx.log(ngx.INFO, "URL -> ", ngx.var.uri) - local remote_url = string.format("%s/api/v1/uc/wx/get_access_token", "https://test-music-room.moicen.com") + local remote_url = string.format("%s/api/v1/uc/wx/get_access_token", htyuc) ngx.log(ngx.INFO, 'remote_url -> ', remote_url) ngx.log(ngx.INFO, 'HtyHostHeader -> ', htyhostHeader) ngx.log(ngx.INFO, 'HtySudoerToken -> ', sudoerToken) @@ -35,10 +39,9 @@ local function get_access_token() ssl_verify = false, -- 设置参数 ssl_verify 为false 不校验ssl证书 method = "GET", headers = { - ["HtyHost"] = htyhostHeader, + ["HtyHost"] = "wx.moicen.com", ["HtySudoerToken"] = sudoerToken, - }, - body = body_text, + } } ) if res == nil then @@ -76,7 +79,7 @@ local function get_wx_media(media_id) ngx.exit(res.status) end - local filename = ngx.re.match(res.headers['Content-disposition'], [[filename="(\w+\.(amr|speex))"]], "jo")[1] + local filename = ngx.re.match(res.headers['Content-disposition'], [[filename="(.+\.(amr|speex))"]], "jo")[1] local file_dir = ngx.var.tmp_file_dir local saved_audio = file_dir .. "/" .. filename; print('saved audio file...' .. saved_audio); @@ -91,43 +94,37 @@ local function get_wx_media(media_id) return saved_audio; end -local function upload(filename) - local upyun_api = ngx.var.upyun_api - local token = upyun_token(filename) - local file, err = io.open(saved_audio, 'w') - local form = { - ["Authorization"] = token.token, - ["file"] = file, - ["policy"] = token.policy - } - local res, err = httpc:request_uri( - upyun_api, - { - ssl_verify = false, -- 设置参数 ssl_verify 为false 不校验ssl证书 - method = "POST", - body = form, - } - ) - if res == nil then - ngx.log(ngx.ERR, "FAILED TO CONNECT TO *Upyun*", err) - ngx.say(err) - ngx.exit(500) +local function upload(filepath) + local upyun, err = Upyun:new({ + user = ngx.var.upyun_operator, + password = ngx.var.upyun_password, + localFilePath = filepath + }) + + if not upyun then + ngx.status = 500 + ngx.log(ngx.ERR, "failed to initialize upyun: " .. err) + return end - if 200 ~= res.status then - ngx.log(ngx.ERR, 'GET WECHET MEDIA *FAILED*', err) - ngx.say(err) - ngx.exit(res.status) + local bucket = ngx.var.upyun_bucket + local directory = ngx.var.upyun_directory + local filename = strip_path.strip_path(filepath) + + local savePath = bucket .. "/" .. directory .. "/" .. filename + + local info, err = upyun:upload_file(savePath, nil, nil) + if not info then + ngx.status = 502 + ngx.log(ngx.ERR, "failed to upload image file : " .. err) + return + else + ngx.status = 200 + ngx.say(ngx.var.upyun_cdn .. directory .. "/" .. filename) end end local function convert() - -- mock for test - local res = cjson.encode({ - r = true, d = "https://upyun.alchemy-studio.cn/daily-music/audios/Song-of-joy.mp3" - }) - ngx.say(res) - ngx.exit(200) local file_dir = ngx.var.tmp_file_dir ngx.req.read_body() @@ -147,13 +144,11 @@ local function convert() local result, _, code = os.execute(cmd) if result and code == 0 then ngx.log(ngx.INFO, "result -> ", result); - upload(result) + upload(converted_audio_file) else ngx.status = 500 ngx.log(ngx.ERR, "AUDIO CONVERT *FAILED*") end - - ngx.log(ngx.INFO, "Output audio file -> ", result); end convert(); diff --git a/scripts/test_upyun_upload.lua b/scripts/test_upyun_upload.lua index ca3da86..48576d0 100644 --- a/scripts/test_upyun_upload.lua +++ b/scripts/test_upyun_upload.lua @@ -1,16 +1,18 @@ +package.path = package.path .. ';/usr/local/openresty/nginx/scripts/?.lua'; local yun = require("upyun") +local cjson = require "cjson" local function upyun_upload_file() local config = { user = "moicen", --授权操作员名称 passwd = "NyJ51zRwFApY9Wo9EHJMrb8GI9YtvpVN", --操作员密码 - localFilePath = "/Users/liyong/Code/Lua/resty_functions/test_files_dir/r2d2.jpeg" + localFilePath = "/file_upload/abc.mp3" } local upyun = yun:new(config) - local savePath = "huiwing/test/r2d2.jpeg" + local savePath = "huiwing/test/abc.mp3" local gmkerl = nil local options = nil @@ -19,7 +21,7 @@ local function upyun_upload_file() ngx.say("failed to upload image file : " .. err) return else - ngx.say(info) + ngx.say(cjson.encode(info)) end end diff --git a/scripts/upyun.lua b/scripts/upyun.lua index 081cb77..aed4414 100644 --- a/scripts/upyun.lua +++ b/scripts/upyun.lua @@ -284,8 +284,8 @@ local function _request(sock, method, path, headers, body, extra) -- Build and send request header print("Debug upyun module request header method : ", method) print("Debug upyun module request header path : ", path) - print("Debug upyun module request header headers : ", headers) - print("Debug upyun module request header extra : ", extra) + --print("Debug upyun module request header headers : ", headers) + --print("Debug upyun module request header extra : ", extra) local header = _req_header(method, path, headers, extra) local bytes, err = sock:send(header) @@ -636,21 +636,21 @@ function _M.upload_file(self, path, gmkerl, option) if not ret then return nil, err end - print("Upyun module upload file request ret : ", ret) + --print("Upyun module upload file request ret : ", ret) - print("Upyun module upload file parse response headers : ", ret) + --print("Upyun module upload file parse response headers : ", ret) ret, err = _parse_upyun_headers(ret.headers, [[^x-upyun-([\w-]+)$]]) if not ret then return nil, err end - print("Upyun module upload file parse response headers ret : ", ret) + --print("Upyun module upload file parse response headers ret : ", ret) -- write the original author back as header.Authorization -- may be changed in the _upyun_request() headers.Authorization = author headers["Content-Length"] = "0" - print("Upyun module upload file ret : ", ret) + --print("Upyun module upload file ret : ", ret) return ret end