## 6.1.9 Uploading Files

#### Programmatic File Uploads

Grails supports file uploads via Spring's MultipartHttpServletRequest interface. To upload a file the first step is to create a multipart form like the one below:

    Upload Form: <br />
    	<g:form action="upload" method="post" enctype="multipart/form-data">
    		<input type="file" name="myFile" />
    		<input type="submit" />
    	</g:form>

There are then a number of ways to handle the file upload. The first way is to work with the Spring MultipartFile instance directly:

    def upload = {
        def f = request.getFile('myFile')
        if(!f.empty) {
          f.transferTo( new File('/some/local/dir/myfile.txt') )
          response.sendError(200,'Done');
        }
        else {
           flash.message = 'file cannot be empty'
           render(view:'uploadForm')
        }
    }

This is clearly handy for doing transfers to other destinations and manipulating the file directly as you can obtain an InputStream and so on via the MultipartFile interface.

#### File Uploads through Data Binding

File uploads can also be performed via data binding. For example say you have an `Image` domain class as per the below example:

    class Image {
       byte[] myFile
    }

Now if you create an image and pass in the `params` object such as the below example, Grails will automatically bind the file's contents as a byte to the `myFile` property:

    def img = new Image(params)

It is also possible to set the contents of the file as a string by changing the type of the `myFile` property on the image to a String type:

    class Image {
       String myFile
    }