[LEDE-DEV] Luci's HTTP API

Levente leventelist at gmail.com
Fri Sep 8 07:42:57 PDT 2017


Thanks.


That might work inside LUCI. I'm sorry, I wasn't clear enough. I want
to use the library to actually create my own web application. I don't
want to integrate it into LUCI.

But thanks anyways. :-)


Levente

On Fri, Sep 8, 2017 at 12:15 PM, Karl Palsson <karlp at tweak.net.au> wrote:
>
> Here's a snippet I've used to accept HTTP POST of a file to in
> luci...
>
> http = require("luci.http")
>
>
>     local method = http.getenv("REQUEST_METHOD")
>     local pathinfo = http.getenv("PATH_INFO") -- from luci
>
>
> --- if method == post and path info == allowed for your requirements.
>
>         http.setfilehandler(
>             function(meta, chunk, eof)
>                 -- If this was multipart form, make sure to only accept the documented form field.
>                 -- return true to continue with subsequent chunks.
>                 if meta and (meta.name ~= "raw") then return true end
>                 if not file then
>                     -- Don't trample a file if we don't get any data.
>                     if not chunk then return false end
>                     file = io.open(file_path, "w")
>                 end
>                 if chunk then
>                     file:write(chunk)
>                 end
>                 if eof then
>                     file:close()
>                 end
>                 return true
>             end
>         )
>         -- trigger handler!
>         http.content()
>
>
> Cheers,
> Karl P
>
>
> Levente <leventelist at gmail.com> wrote:
>> Dear LEDE developers,
>>
>>
>> Maybe this is off topic, but I'm trying to use LUCI's HTTP
>> protocol parser library for to upload a file to the system. I
>> find very little documentation on this.
>>
>> I have the following code that obviously does nothing. Could
>> you help me add the missing parts?
>>
>>
>> http = require "luci.http"
>> proto = require "luci.http.protocol"
>>
>>
>> local fileOpened = 0
>> local fileP
>>
>> function filecb(t, data, isLast)
>>
>>     if fileOpened == 0 then
>>         FileP = io.open("/tmp/blabla", "wb")
>>         fileOpened = 1
>>     end
>>
>>     FileP:write(data)
>>
>>     if isLast then
>>         io.close(FileP)
>>     end
>>
>> end
>>
>>
>> src = http.source()
>> httpMsg = proto.parse_message_header(src)
>>
>> proto.parse_message_body(src, httpMsg, filecb)
>>
>> http.close()
>>
>>
>> So I experience that http.source() is not even returns. It dies
>> with this error:
>>
>> /usr/bin/lua: /usr/lib/lua/luci/http.lua:193: attempt to index
>> field 'request' (a nil value) stack traceback:
>>     /usr/lib/lua/luci/http.lua:193: in function 'source'
>>     ./config_v2.sh:27: in main chunk
>>     [C]: ?
>>
>> Browsing the source code this call shall return
>>
>> context.request.input
>>
>> So the question is how to initialize that?
>>
>>
>> Thank you,
>> Levente
>>
>> _______________________________________________
>> Lede-dev mailing list
>> Lede-dev at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/lede-dev



More information about the Lede-dev mailing list