Re: Get images or binary files from web form
- Posted by jmduro Aug 09, 2022
- 2428 views
Here is my test program that works:
-- test program for euphoria cgi include std/filesys.e include std/convert.e include std/io.e include std/net/url.e function test_variable(sequence variable) object val = getenv(variable) -- if val is a string, return it, otherwise "Undefined" if atom(val) then return "Undefined" elsif object(val) then for i = 1 to length(val) do if not atom(val[i]) then return "Invalid string sequence" end if end for return val else return "Invalid type for string" end if return "foozle" -- never reached end function procedure print_variable(sequence val) printf(1, "%s: %s\n", {val, test_variable(val)} ) end procedure procedure main(sequence cmd) sequence dt = date() sequence path = test_variable("SCRIPT_FILENAME") -- PATH_TRANSLATED on Apache2 sequence webDir = dirname(path) sequence script = filebase(path) sequence query, method object nBytes puts(1, "Content-Type: text/plain\n\n") puts(1, "COMMAND LINE\n============\n\n") for i = 1 to length(cmd) do printf(1, "%d: %s\n", {i, cmd[i]} ) end for puts(1, "\n\nREMOTE INFO\n===========\n") print_variable("REMOTE_ADDR") print_variable("REMOTE_HOST") print_variable("REMOTE_HOST") print_variable("REMOTE_PORT") print_variable("REMOTE_IDENT") puts(1, "\n\nSERVER INFO\n===========\n") print_variable("SERVER_ADMIN") print_variable("SERVER_NAME") print_variable("GATEWAY_INTERFACE") print_variable("SERVER_PROTOCOL") print_variable("SERVER_PORT") print_variable("SERVER_SOFTWARE") print_variable("SERVER_SIGNATURE") method = test_variable("REQUEST_METHOD") printf(1, "%s: %s\n", {"REQUEST_METHOD", method} ) print_variable("SESSION_PATH") print_variable("PATH") print_variable("PATH_INFO") print_variable("REQUEST_SCHEME") print_variable("REQUEST_URI") print_variable("DOCUMENT_URI") print_variable("PATH_TRANSLATED") print_variable("SCRIPT_NAME") print_variable("SCRIPT_FILENAME") if equal(method, "GET") then -- print_variable("QUERY_STRING") query = decode(test_variable("QUERY_STRING")) printf(1, "%s: %s\n", {"QUERY_STRING", query} ) else nBytes = getenv("CONTENT_LENGTH") query = get_bytes(0, to_number(nBytes)) printf(1, "%s: %s\n", {"BODY", query} ) end if print_variable("AUTH_TYPE") print_variable("CONTENT_TYPE") print_variable("CONTENT_LENGTH") print_variable("DOCUMENT_ROOT") puts(1, "\n\nBROWSER INFO\n=============\n") print_variable("HTTP_ACCEPT") print_variable("HTTP_USER_AGENT") print_variable("HTTP_COOKIE") print_variable("HTTP_HOST") print_variable("HTTP_REFERER") print_variable("HTTPS") end procedure main(command_line())
Here is the answer to a POST request when sending a Zip file:
COMMAND LINE ============ 1: C:\My Program Files\euphoria4.1\bin\eui.exe 2: C:/Data/Euphoria/transfer/server/www/test.ex REMOTE INFO =========== REMOTE_ADDR: 127.0.0.1 REMOTE_HOST: Undefined REMOTE_HOST: Undefined REMOTE_PORT: 55454 REMOTE_IDENT: Undefined SERVER INFO =========== SERVER_ADMIN: Undefined SERVER_NAME: 127.0.0.1 GATEWAY_INTERFACE: CGI/1.1 SERVER_PROTOCOL: HTTP/1.1 SERVER_PORT: 80 SERVER_SOFTWARE: lighttpd/1.4.49 SERVER_SIGNATURE: Undefined REQUEST_METHOD: POST SESSION_PATH: Undefined PATH: C:\My Program Files\lighttpd PATH_INFO: Undefined REQUEST_SCHEME: http REQUEST_URI: /test.ex DOCUMENT_URI: Undefined PATH_TRANSLATED: Undefined SCRIPT_NAME: /test.ex SCRIPT_FILENAME: C:/Data/Euphoria/transfer/server/www/test.ex BODY: ------WebKitFormBoundaryXeARN8nzBv8gcjaM Content-Disposition: form-data; name="File"; filename="vt100_v0.1.9.zip" Content-Type: application/x-zip-compressed PK AUTH_TYPE: Undefined CONTENT_TYPE: multipart/form-data; boundary=----WebKitFormBoundaryXeARN8nzBv8gcjaM CONTENT_LENGTH: 1159310 DOCUMENT_ROOT: C:/Data/Euphoria/transfer/server/www BROWSER INFO ============= HTTP_ACCEPT: */* HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 Safari/537.36 Edg/102.0.1245.50 HTTP_COOKIE: Undefined HTTP_HOST: 127.0.0.1 HTTP_REFERER: Undefined HTTPS: Undefined
I use lighttpd on Windows 10.
Jean-Marc