diff --git a/APIs/api.lua b/APIs/api.lua index f992415..4910092 100644 --- a/APIs/api.lua +++ b/APIs/api.lua @@ -6,6 +6,7 @@ package.cpath = __api__.apiroot..'/?.so' require("std") require("utils") require("extra_mime") +ulib = require("ulib") -- set session SESSION = {} diff --git a/APIs/extra_mime.lua b/APIs/extra_mime.lua index 3c219b4..9d2376b 100644 --- a/APIs/extra_mime.lua +++ b/APIs/extra_mime.lua @@ -41,3 +41,35 @@ function std.isBinary(name) return bin end end + +function std.sendFile(m) + local mime = std.mimeOf(m) + local finfo = ulib.file_stat(m) + local len = tostring(math.floor(finfo.size)) + local len1 = tostring(math.floor(finfo.size - 1)) + if mime == "audio/mpeg" then + std.status(200, "OK") + std.custom_header("Pragma", "public") + std.custom_header("Expires", "0") + std.custom_header("Content-Type", mime) + std.custom_header("Content-Length", len) + std.custom_header("Content-Disposition", "inline; filename=" .. std.basename(m)) + std.custom_header("Content-Range:", "bytes 0-" .. len1 .. "/" .. len) + std.custom_header("Accept-Ranges", "bytes") + std.custom_header("X-Pad", "avoid browser bug") + std.custom_header("Content-Transfer-Encoding", "binary") + std.custom_header("Cache-Control", "no-cache, no-store") + std.custom_header("Connection", "Keep-Alive") + std.custom_header("Etag", "a404b-c3f-47c3a14937c80") + else + std.status(200, "OK") + std.custom_header("Content-Type", mime) + std.custom_header("Content-Length", len) + end + std.header_flush() + if std.is_bin(m) then + std.fb(m) + else + std.f(m) + end +end diff --git a/APIs/std.lua b/APIs/std.lua index 81e9d2e..f70dc69 100644 --- a/APIs/std.lua +++ b/APIs/std.lua @@ -117,6 +117,7 @@ end function std.is_file(f) return std.is_dir(f) == false end + std.ws.TEXT = 1 std.ws.BIN = 2 std.ws.CLOSE = 8 diff --git a/dist/lua-0.5.2b.tar.gz b/dist/lua-0.5.2b.tar.gz index 148dfbf..73e5520 100644 Binary files a/dist/lua-0.5.2b.tar.gz and b/dist/lua-0.5.2b.tar.gz differ