我有一个带有Image Domain Class和Controller的grails项目。 我刚刚安装了grails ImageTools 1.0.4插件,我想为将要上传的图像生成缩略图。
My Image-Domain-Class:
class Image {
byte[] data
//String name
byte[] thumbnail
static constraints = {
//name()
data()
}
}
我的控制器中的“安全”动作:
def save = {
def imageInstance = new Image(params)
def imageTool = new ImageTool()
imageTool.load(imageInstance.data)
imageTool.thumbnail(320)
imageInstance.thumbnail = imageTool.getBytes("JPEG") //Here is my problem!
if(!imageInstance.hasErrors() && imageInstance.save()) {
flash.message = "Image ${imageInstance.id} created"
redirect(action:show,id:imageInstance.id)
}
else {
render(view:'create',model:[imageInstance:imageInstance])
}
}
当我启动Grails应用程序并上传图像时,我收到以下错误消息:
错误200:groovy.lang.MissingMethodException:没有方法签名:ImageTool.getBytes()适用于参数类型:(java.lang.String)values:{“JPEG”} Servlet:Grails URI:/grailsproject/grails/image/save.dispatch 异常消息:没有方法签名:ImageTool.getBytes()适用于参数类型:(java.lang.String)values:{“JPEG”} 引发者:groovy.lang.MissingMethodException:没有方法签名:ImageTool.getBytes()适用于参数类型:(java.lang.String)values:{“JPEG”} 类:GrailsAuthenticationProcessingFilter 在线:[57]
它表示缺少方法getBytes()但该方法仍然可用。我的IDE intelliJ也识别出没有错误。
那我该怎么办?有人可以帮帮我吗? 对不起,我的英语不好。如果您是德国人,请查看http://support-network.info/board/problem-mit-imagetools-getbytes-t3008.html。
答案 0 :(得分:1)
我使用Grails 1.0.4。 我可以修复此错误消息。我刚刚从里卡多的git Repository(插件开发人员)复制了getBytes()方法,并用新的替换旧的。现在一切正常!我不知道这个错误在哪里,但我很高兴我解决了它。
非常感谢你们!
答案 1 :(得分:0)
看起来这个方法是一个相当新的类(2009年3月6日)。如果您已经验证该方法位于./plugins/imagetools/src/groovy/ImageTool.groovy文件中,我建议您运行:
grails clean
如果您之前使用过该插件,则可能是缓存问题。
答案 2 :(得分:0)
你从John收到的回复听起来是正确的 - 如果你已经安装了新的插件并且可以看到代码,但是只在IntelliJ之外继续收到此错误,你应该尝试清理你的grails缓存 - 这很可能是一个较旧的插件的副本在缓存上预编译。
您使用的是Grails 1.1吗?我还没有使用最新的grails测试它,但我知道它使插件不在项目下但在一个单独的目录中。请告诉我,我会试一试。
答案 3 :(得分:0)
我不知道插件是什么让你直接使用JAI,恕我直言,它没有做太多。
我使用ImageMagick进行图像转换,结果优于我所看到的JAI。当然,如果您的流量与亚马逊的流量不同,那么如果您需要尽快获得收入,那么您可能需要考虑我已经完成的工作。
我使用apache-commons-exec来处理打开外部进程和从std进出的数据。我唯一使用JAI的是读取图像的大小。
答案 4 :(得分:0)