我是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应用程序中上传图像。它只能接受图像文件。
任何人都可以提供帮助吗?
感谢。
答案 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)来确定文件类型