Added PUT processing for image_uploader EWF example.
This commit is contained in:
@@ -43,6 +43,7 @@ feature {NONE} -- Initialization
|
|||||||
local
|
local
|
||||||
www: WSF_FILE_SYSTEM_HANDLER
|
www: WSF_FILE_SYSTEM_HANDLER
|
||||||
do
|
do
|
||||||
|
map_uri_template_agent_with_request_methods ("/upload/{name}{?nb}", agent execute_upload_put, router.methods_put)
|
||||||
map_uri_template_agent ("/upload{?nb}", agent execute_upload)
|
map_uri_template_agent ("/upload{?nb}", agent execute_upload)
|
||||||
|
|
||||||
create www.make (document_root)
|
create www.make (document_root)
|
||||||
@@ -95,7 +96,7 @@ feature -- Execution
|
|||||||
local
|
local
|
||||||
l_body: STRING_8
|
l_body: STRING_8
|
||||||
l_safe_filename: STRING_8
|
l_safe_filename: STRING_8
|
||||||
fn: FILE_NAME
|
fn: PATH
|
||||||
page: WSF_HTML_PAGE_RESPONSE
|
page: WSF_HTML_PAGE_RESPONSE
|
||||||
n: INTEGER
|
n: INTEGER
|
||||||
do
|
do
|
||||||
@@ -114,8 +115,8 @@ feature -- Execution
|
|||||||
end
|
end
|
||||||
if attached {WSF_STRING} req.query_parameter ("demo") as p_demo then
|
if attached {WSF_STRING} req.query_parameter ("demo") as p_demo then
|
||||||
create fn.make_from_string (document_root)
|
create fn.make_from_string (document_root)
|
||||||
fn.set_file_name (p_demo.value)
|
fn := fn.extended (p_demo.value)
|
||||||
l_body.append ("File: <input type=%"file%" name=%"uploaded_file[]%" size=%"60%" value=%""+ html_encode (fn.string) +"%"></br>%N")
|
l_body.append ("File: <input type=%"file%" name=%"uploaded_file[]%" size=%"60%" value=%""+ html_encode (fn.name) +"%"></br>%N")
|
||||||
end
|
end
|
||||||
|
|
||||||
from
|
from
|
||||||
@@ -131,15 +132,17 @@ feature -- Execution
|
|||||||
create l_body.make (255)
|
create l_body.make (255)
|
||||||
l_body.append ("<h1>EWF: Uploaded files</h1>%N")
|
l_body.append ("<h1>EWF: Uploaded files</h1>%N")
|
||||||
l_body.append ("<ul>")
|
l_body.append ("<ul>")
|
||||||
|
n := 0
|
||||||
across
|
across
|
||||||
req.uploaded_files as c
|
req.uploaded_files as c
|
||||||
loop
|
loop
|
||||||
|
n := n + 1
|
||||||
l_body.append ("<li>")
|
l_body.append ("<li>")
|
||||||
l_body.append ("<div>" + c.item.name + "=" + html_encode (c.item.filename) + " size=" + c.item.size.out + " type=" + c.item.content_type + "</div>")
|
l_body.append ("<div>" + c.item.name + "=" + html_encode (c.item.filename) + " size=" + c.item.size.out + " type=" + c.item.content_type + "</div>")
|
||||||
create fn.make_from_string (files_root)
|
create fn.make_from_string (files_root)
|
||||||
l_safe_filename := c.item.safe_filename
|
l_safe_filename := c.item.safe_filename
|
||||||
fn.set_file_name (l_safe_filename)
|
fn := fn.extended (l_safe_filename)
|
||||||
if c.item.move_to (fn.string) then
|
if c.item.move_to (fn.name) then
|
||||||
if c.item.content_type.starts_with ("image") then
|
if c.item.content_type.starts_with ("image") then
|
||||||
l_body.append ("%N<a href=%"../files/" + url_encode (l_safe_filename) + "%"><img src=%"../files/"+ l_safe_filename +"%" /></a>")
|
l_body.append ("%N<a href=%"../files/" + url_encode (l_safe_filename) + "%"><img src=%"../files/"+ l_safe_filename +"%" /></a>")
|
||||||
else
|
else
|
||||||
@@ -148,6 +151,7 @@ feature -- Execution
|
|||||||
end
|
end
|
||||||
l_body.append ("</li>")
|
l_body.append ("</li>")
|
||||||
end
|
end
|
||||||
|
|
||||||
l_body.append ("</ul>")
|
l_body.append ("</ul>")
|
||||||
|
|
||||||
create page.make
|
create page.make
|
||||||
@@ -158,8 +162,85 @@ feature -- Execution
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
execute_upload_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||||
|
-- Upload page is requested, PUT
|
||||||
|
require
|
||||||
|
is_put_request_method: req.is_put_request_method
|
||||||
|
local
|
||||||
|
l_body: STRING_8
|
||||||
|
l_safe_filename: detachable READABLE_STRING_32
|
||||||
|
fn: PATH
|
||||||
|
page: WSF_HTML_PAGE_RESPONSE
|
||||||
|
n: INTEGER
|
||||||
|
do
|
||||||
|
create l_body.make (255)
|
||||||
|
l_body.append ("<h1>EWF: Uploaded files</h1>%N")
|
||||||
|
l_body.append ("<ul>")
|
||||||
|
n := 0
|
||||||
|
if attached {WSF_STRING} req.path_parameter ("name") as p_name then
|
||||||
|
l_safe_filename := p_name.value
|
||||||
|
end
|
||||||
|
if l_safe_filename = Void or else l_safe_filename.is_empty then
|
||||||
|
l_safe_filename := "input_data"
|
||||||
|
end
|
||||||
|
if n = 0 and req.content_length_value > 0 then
|
||||||
|
if attached new_temporary_output_file ("tmp-uploaded-file_" + n.out) as f then
|
||||||
|
req.read_input_data_into_file (f)
|
||||||
|
f.close
|
||||||
|
create fn.make_from_string (files_root)
|
||||||
|
fn := fn.extended (l_safe_filename)
|
||||||
|
f.rename_file (fn.name)
|
||||||
|
l_body.append ("<li>")
|
||||||
|
l_body.append ("<div>Input data : size=" + f.count.out + " (" + req.content_length_value.out + ")</div>")
|
||||||
|
l_body.append ("%N<a href=%"../files/" + url_encode (l_safe_filename) + "%">"+ html_encode (l_safe_filename) +"</a>")
|
||||||
|
l_body.append ("</li>")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
l_body.append ("</ul>")
|
||||||
|
|
||||||
|
create page.make
|
||||||
|
page.set_title ("EWF: uploaded image")
|
||||||
|
page.add_style ("../style.css", "all")
|
||||||
|
page.set_body (l_body)
|
||||||
|
res.send (page)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
feature {NONE} -- Encoder
|
feature {NONE} -- Encoder
|
||||||
|
|
||||||
|
new_temporary_output_file (n: detachable READABLE_STRING_8): detachable FILE
|
||||||
|
local
|
||||||
|
bp: detachable PATH
|
||||||
|
d: DIRECTORY
|
||||||
|
i: INTEGER
|
||||||
|
do
|
||||||
|
create bp.make_current
|
||||||
|
create d.make_with_path (bp)
|
||||||
|
if not d.exists then
|
||||||
|
d.recursive_create_dir
|
||||||
|
end
|
||||||
|
if n /= Void then
|
||||||
|
bp := bp.extended ("tmp-download-" + n)
|
||||||
|
else
|
||||||
|
bp := bp.extended ("tmp")
|
||||||
|
end
|
||||||
|
from
|
||||||
|
i := 0
|
||||||
|
until
|
||||||
|
Result /= Void or i > 100
|
||||||
|
loop
|
||||||
|
i := i + 1
|
||||||
|
create {RAW_FILE} Result.make_with_path (bp.appended ("__" + i.out))
|
||||||
|
if Result.exists then
|
||||||
|
Result := Void
|
||||||
|
else
|
||||||
|
Result.open_write
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
Result /= Void implies Result.is_open_write
|
||||||
|
end
|
||||||
|
|
||||||
url_encode (s: READABLE_STRING_32): STRING_8
|
url_encode (s: READABLE_STRING_32): STRING_8
|
||||||
-- URL Encode `s' as Result
|
-- URL Encode `s' as Result
|
||||||
do
|
do
|
||||||
|
|||||||
Reference in New Issue
Block a user