123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- return function (connection, req, args)
- dofile("httpserver-header.lc")(connection, 200, 'json')
- connection:send('{')
- local mbOffset = nil
- local mbLen = nil
- local mbData = nil
- local mbCmd = nil
- local mbFilename = nil
- local fieldsCount = 0
- local fileSize = 0
- local i = 0
- local binaryData = ''
- local currentByte = nil
-
- for name, value in pairs(args) do
- if (name == "offset") then
- mbOffset = tonumber(value, 10)
- fieldsCount = fieldsCount + 1
- end
- if (name == "len") then
- mbLen = tonumber(value, 10)
-
- fieldsCount = fieldsCount + 1
- end
- if (name == "data") then
- mbData = value
-
- fieldsCount = fieldsCount + 1
- end
- if (name == "filename") then
- mbFilename = value
-
- fieldsCount = fieldsCount + 1
- end
- if (name == "filesize") then
- fileSize = tonumber(value, 10)
-
- fieldsCount = fieldsCount + 1
- end
- if (name == "cmd") then
- mbCmd = value
-
- fieldsCount = fieldsCount + 1
- end
- end
-
- if (mbCmd == 'upload') then
- if (fieldsCount > 5) then
- if (mbFilename ~= 'upload.lua') then
- connection:send('"offset":"' .. mbOffset .. '",')
- connection:send('"len":"' .. mbLen .. '",')
- connection:send('"filename":"' .. mbFilename .. '"')
-
- mbFilename = 'http/' .. mbFilename
-
- for i=1,string.len(mbData),2 do
- currentByte = tonumber(string.sub(mbData, i, i + 1), 16)
- binaryData = binaryData .. string.char(currentByte)
- end
-
- local mbTmpFilename = string.sub(mbFilename, 0, 27) .. '.dnl'
- if (mbOffset > 0) then
- file.open(mbTmpFilename,'a+')
- else
- file.remove(mbTmpFilename)
- file.open(mbTmpFilename,'w+')
- end
- file.seek("set", mbOffset)
- file.write(binaryData)
- file.close()
-
- binaryData = nil
-
- if (fileSize == mbLen + mbOffset) then
- file.remove(mbFilename)
- file.rename(mbTmpFilename, mbFilename)
- file.remove(mbTmpFilename)
-
- if (string.sub(mbFilename, -4) == '.lua') then
- file.remove(string.sub(mbFilename, 0, -3) .. "lc")
- node.compile(mbFilename)
- file.remove(mbFilename)
- end
- end
- end
- end
- elseif (mbCmd == 'list') then
- local remaining, used, total=file.fsinfo()
- local headerExist = 0
-
- connection:send('"files":{')
-
- for name, size in pairs(file.list()) do
- local isHttpFile = string.match(name, "(http/)") ~= nil
-
- if isHttpFile then
- if (headerExist > 0) then
- connection:send(',')
- end
-
- local url = string.match(name, ".*/(.*)")
-
- connection:send('"' .. url .. '":"' .. size .. '"')
-
- headerExist = 1
- end
- end
-
- connection:send('},')
-
- connection:send('"total":"' .. total .. '",')
- connection:send('"used":"' .. used .. '",')
- connection:send('"free":"' .. remaining .. '"')
- elseif (mbCmd == 'remove') then
- if (fieldsCount > 1) then
- if (mbFilename ~= 'upload.lua') and (mbFilename ~= 'upload.lc') and (mbFilename ~= 'upload.html.gz') then
- file.remove('http/' .. mbFilename)
- end
- end
- end
-
- connection:send('}')
- collectgarbage()
- end
|