图像上传在grails中

时间:2008-12-12 14:54:41

标签: java grails groovy frameworks

我是grails的新手。我正在做的Web应用程序从客户端上传图像并将其存储在服务器中。

我的Gsp代码是:

<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。因为我想检查文件扩展名,我想使用If循环,确保上传的文件是否是图像文件。但我不知道如何在grails中找到文件扩展名。

还有其他方法可以在grails应用程序中上传图像。它只能接受图像文件。

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

感谢。

6 个答案:

答案 0 :(得分:7)

我不知道以下答案是找到文件扩展名的正确方法。我也是新手。但这个答案正在运作

使用 file.getOriginalFilename()方法。它返回一个类似“test.jpg”的字符串。然后使用“。”将tokenize方法拆分文件名。然后从中获取最后一个字符串元素分割列表。这是文件的扩展名。现在你可以完成剩余的过程。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

我想你可以试试这个

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

好的,这真的很晚了。但我发现最好的解决方案(因为扩展并没有真正说明内容)是使用file.getContentType() ......

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

希望这会有所帮助。

答案 5 :(得分:0)

您可以使用Files.probeContentType(filePath)来确定文件类型