3

我是 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')
        }
}

在这段代码中,如果我上传一些其他文件,如文本文件,它会抛出异常。为此,我想检查文件扩展名,并且我想使用 If 循环来确保上传的文件是图像文件。但我不知道如何找到grails 中的文件扩展名。

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

谁能提供帮助?

谢谢。

4

6 回答 6

7

我不知道以下答案是找到文件扩展名的正确方法。我对此也很陌生。但是这个答案有效

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

于 2008-12-14T02:27:59.343 回答
3

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

于 2008-12-14T03:08:32.180 回答
2
if(params?.photo?.getContentType()=='image/jpeg' || 
   params?.photo?.getContentType()=='image/gif' ||
   params?.photo?.getContentType()=='image/png' || 
   params?.photo?.getContentType()=='image/bmp'
)

我想你可以试试这个

于 2010-12-13T07:39:28.243 回答
1

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

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

于 2012-07-06T14:01:52.477 回答
0

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

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

希望这可以帮助。

于 2012-03-01T10:26:51.697 回答
0

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

于 2014-03-29T00:25:17.997 回答