Comment 0 for bug 996793

Revision history for this message
Dennis Knochenwefel (dennis-knochenwefel) wrote :

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&#13;&#10;",
        'Content-Disposition: form-data; name="file"; filename="test.jpg"&#13;&#10;',
        "Content-Type: multipart/form-data&#13;&#10;",
        "&#13;&#10;",
        base64:decode(file:read-binary ($filename)),"&#13;&#10;",
        "------------------------------6d6f6d615f08&#13;&#10;",
        'Content-Disposition: form-data; name="description"&#13;&#10;',
        "&#13;&#10;",
        "A test file&#13;&#10;",
        "------------------------------6d6f6d615f08&#13;&#10;",
        'Content-Disposition: form-data; name="category"&#13;&#10;',
        "&#13;&#10;",
        "main&#13;&#10;",
        "------------------------------6d6f6d615f08--&#13;&#10;"
      )
}</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>
)