Comparison

plugins/mod_http.lua @ 11022:3e5bc34be734

mod_http: Add way to signal that a module supports streaming uploads Fixes #726 API: module:provides("http", { streaming_uploads = true; route = { PUT = function (event) event.request.body_sink = io.tmpfile(); return true; end } })
author Kim Alvefur <zash@zash.se>
date Sat, 01 Aug 2020 18:41:30 +0200
parent 11021:9673c95895fb
child 11066:dc41c8dfd2b1
comparison
equal deleted inserted replaced
11021:9673c95895fb 11022:3e5bc34be734
135 135
136 local function options_handler(event_data) 136 local function options_handler(event_data)
137 cors_handler(event_data); 137 cors_handler(event_data);
138 return ""; 138 return "";
139 end 139 end
140
141 local streaming = event.item.streaming_uploads;
140 142
141 for key, handler in pairs(event.item.route or {}) do 143 for key, handler in pairs(event.item.route or {}) do
142 local event_name = get_http_event(host, app_path, key); 144 local event_name = get_http_event(host, app_path, key);
143 if event_name then 145 if event_name then
144 local method = event_name:match("^%S+"); 146 local method = event_name:match("^%S+");
158 end; 160 end;
159 module:hook_object_event(server, event_name:sub(1, -3), redir_handler, -1); 161 module:hook_object_event(server, event_name:sub(1, -3), redir_handler, -1);
160 elseif event_name:sub(-1, -1) == "/" then 162 elseif event_name:sub(-1, -1) == "/" then
161 module:hook_object_event(server, event_name:sub(1, -2), redir_handler, -1); 163 module:hook_object_event(server, event_name:sub(1, -2), redir_handler, -1);
162 end 164 end
163 do 165 if not streaming then
164 -- COMPAT Modules not compatible with streaming uploads behave as before. 166 -- COMPAT Modules not compatible with streaming uploads behave as before.
165 local _handler = handler; 167 local _handler = handler;
166 function handler(event) -- luacheck: ignore 432/event 168 function handler(event) -- luacheck: ignore 432/event
167 if event.request.body ~= false then 169 if event.request.body ~= false then
168 return _handler(event); 170 return _handler(event);