I\'m trying to emulate the file upload code from the grails website, and I\'m running into some problems. I\'m using the same code as found here. Here is my code:
Now with the Grails 2.x use:
<g:uploadForm name="upload" action="upload" method="POST">
<input type="file" name="file" />
</g:uploadForm>
def upload = {
def file = request.getFile('file')
assert file instanceof CommonsMultipartFile
if(!file.empty){ //do something }
else { //do something }
}
More clean, more simple.
Problem solved!
I was using the example code for uploading files to Grails differently than the original author probably intended. The problem is that when the upload method of the controller was called, it was sometimes for the original render of the Upload page. The request in that method was was not of type MultipartHttpServletRequest. When I did a POST with my file to upload, then Spring did the correct thing and changed my requestion to MultipartHttpServletRequest. So, I needed to do a simple check in my update controller method before using my request like a MultipartHttpServletRequest.
if(request instanceof MultipartHttpServletRequest)
{
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myFile");
if(!f.empty)
flash.message = 'success'
else
flash.message = 'file cannot be empty'
}
else
flash.message = 'request is not of type MultipartHttpServletRequest'
make sure you update the html (your gsp with the form to upload from) to have the enctype as they show:
<g:form action="upload" method="post" enctype="multipart/form-data">
Hope that is helpful, seems too obvious but it's my first thought after seeing your error message.
Someone here seems to be having the same troubles you had. He says he "fixed" it:
Solved. It was my mistake, I was going in action save before submitting the form, so I suppose there was no file.
Not sure how to take what he said, but maybe it'll help you.