2008-12-12 163 views
3

我是grails.me新手,我正在做web应用程序,它从客户端上传图像并将其存储在服务器中。grails图片上传

我的普惠制代码:

<g:uploadForm action="saveImage"> 
<input type="file" name="image"> 
<input type="submit" value="Submit"> 
</g:uploadForm> 

在控制器我saveImage操作是:

def saveImage={ 
def file = request.getFile('image') 
     if (file && !file.empty) { 
      file.transferTo(new java.io.File("image.jpg")) 
      flash.message = 'Image uploaded' 
      redirect(action: 'uploadImage') 
     } 
} 

在此代码,如果我上传一些其他文件,如文本文件,它抛出Exception.For,我想检查文件扩展名,我想要使用If循环,确保上传的文件是图像文件或不是。但我不知道如何在grails中找到文件扩展名。

是否有任何其他方式上传图片在grails application.It只能接受图像文件。

任何人都可以提供帮助吗?

谢谢。

回答

7

我不知道下面的答案是找到file.I的扩展名的正确方法我也是新this.But这个答案正在

使用file.getOriginalFilename() method.It回报像“test.jpg”这样的字符串,然后用“。”使用tokenize方法分割文件名,然后从分割的列表中取出最后一个字符串元素,即文件的扩展名。现在可以完成剩下的过程。

3

从file.getOriginalFilename()获取文件扩展名工作良好。我认为这是更好的方法。

2
if(params?.photo?.getContentType()=='image/jpeg' || 
    params?.photo?.getContentType()=='image/gif' || 
    params?.photo?.getContentType()=='image/png' || 
    params?.photo?.getContentType()=='image/bmp' 
) 

我想你可以试试这个

0

好了,这实在是太晚了。但我找到了最好的解决方案(如扩展真的不说说内容)是使用file.getContentType() ...

例如,对于JPEG图像,返回值将是一个字符串image/jpeg,你可以轻松地测试。其他文件格式相同(PNG,GIF,...)。

希望这会有所帮助。

+0

只注意到@Sree有同样的建议...是那么难读,我没有看到它在第一。 – fluxon 2012-03-01 10:29:44

1

file.getContentType()存在一个小问题。 Windows和其他系统处理它的方式不同。

例如,一个.csv文件将在其他系统中为text/plain,但在Windows上为application/vnd.ms-excel