XQuery/Uploading Files

< XQuery

Motivation

You want to upload files to your eXist database using simple HTML forms.

Method

We will use the HTML <input> element in the web form and the store function in an XQuery.

HTML Form

We will use a standard HTML form but we will add a enctype="multipart/form-data" attribute.

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>HTML Upload</title>
    </head>
    <body>
        <form enctype="multipart/form-data" method="post" action="upload.xq">
            <fieldset>
                <legend>Upload Document:</legend>
                <input type="file" name="file"/>
                <input type="submit" value="Upload"/>
            </fieldset>
        </form>
    </body>
</html>

Screen Image:

XQuery

On the server side, we will use the request:get-uploaded-file-name() to get the name of the incoming file and the request:get-uploaded-file-data() function to get the data from the file. We can then used the xmldb:store() function to save the file.

File: upload.xq

let $collection := '/db/test/upload-test'
let $filename := request:get-uploaded-file-name('file')

(: make sure you use the right user permissions that has write access to this collection :)
let $login := xmldb:login($collection, 'admin', 'my-admin-password')
let $store := xmldb:store($collection, $filename, request:get-uploaded-file-data('file'))

return
<results>
   <message>File {$filename} has been stored at collection={$collection}.</message>
</results>

Acknowledgments

This example was posted on the eXist open mailing list by Rémi Arnaud on Nov. 05, 2010.

This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.