Re: Get images or binary files from web form

new topic     » goto parent     » topic index » view thread      » older message » newer message

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

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu