2012-05-08 21:56:42 |
Dennis Knochenwefel |
description |
I was implementing some XQuery code for uploading a file and some form data. Fiddling with Multipart request and the http-client wasn't really usable, the http-client added some extra multipart content-type header and didn't work well. In the end I was implementing multipart requests manually:
<http:body media-type = "multipart/form-data; boundary=----------------------------6d6f6d615f08" method = "binary">{
concat (
"------------------------------6d6f6d615f08 ",
'Content-Disposition: form-data; name="file"; filename="test.jpg" ',
"Content-Type: multipart/form-data ",
" ",
base64:decode(file:read-binary ($filename))," ",
"------------------------------6d6f6d615f08 ",
'Content-Disposition: form-data; name="description" ',
" ",
"A test file ",
"------------------------------6d6f6d615f08 ",
'Content-Disposition: form-data; name="category" ',
" ",
"main ",
"------------------------------6d6f6d615f08-- "
)
}</http:body>
As this is not usable for common users, I propose 2 changes:
1. the multipart implementation of the http client can be done in XQuery only (see example above) which would make this implementation more stable
2. a helper module where one just passes an html form and gets an http request for execution, for example:
html-forms:create-request(
<form action="http://www.example.com/upload" method="post" enctype="multipart/form-data">
<input name="file" type="file" value="{$filename}" />
<input name="description" type="text" value="A test file">
<input name="category" type="text" value="main">
</form>
) |
I was implementing some XQuery code for uploading a file and some form data. Fiddling with Multipart request and the http-client wasn't really usable, the http-client added some extra multipart content-type header and didn't work well. In the end I was implementing multipart requests manually:
<http:body media-type="multipart/form-data; boundary=--6d6f6d615f08"
method="binary">{
concat (
"----6d6f6d615f08 ",
'Content-Disposition: form-data; name="file";',
' filename="test.jpg" ',
"Content-Type: multipart/form-data ",
" ",
base64:decode(file:read-binary ($filename))," ",
"----6d6f6d615f08 ",
'Content-Disposition: form-data; name="description" ',
" ",
"A test file ",
"----6d6f6d615f08 ",
'Content-Disposition: form-data; name="category" ',
" ",
"main ",
"----6d6f6d615f08-- "
)
}</http:body>
As this is not usable for common users, I propose 2 changes:
1. the multipart implementation of the http client can be done in XQuery only (see example above) which would make this implementation more stable
2. a helper module where one just passes an html form and gets an http request for execution, for example:
http-client:send-request(
html-forms:create-request(
<form action="http://www.example.com/upload"
method="post"
enctype="multipart/form-data">
<input name="file" type="file" value="{$filename}" />
<input name="description" type="text" value="A test file">
<input name="category" type="text" value="main">
</form>
)
) |
|