在控制器方法中,我尝试上传图像以替换简单横幅广告管理系统中的旧图像。这是方法:
def edit() {
def banner = Banner.get(params.id)
banner.clearErrors()
banner.name = params.name
def imgFile = request.getFile('imageUpload')
if (!imgFile.empty) {
def servletContext = ServletContextHolder.servletContext
def oldImgPath = servletContext.getRealPath("images/banners/${banner.image}")
banner.image = UploadFormService.getSafeFileName(imgFile.getOriginalFilename())
}
if (HomeService.saveBanner(banner)) {
if (!imgFile.empty) {
def oldImg = new File(oldImgPath)
boolean oldImgStatus = oldImg.delete()
imgFile.transferTo(new File("images/banners/${banner.image}"))
}
flash.message = "\"${banner.name}\" was successfully saved!"
} else {
flash.message = "NOK"
}
redirect(action:"index")
}
如果saveBanner(Banner banner)
返回true
并且表单文件输入不为空,则该方法应使用当前映像实例化Groovy File类,从服务器中删除此当前文件,然后传输新映像到服务器文件夹。但是我有以下错误:
错误500:内部服务器错误
URI / vs3 / campanhas / editar / 8 Class groovy.lang.MissingPropertyException消息 没有这样的属性:oldImgPath for class:vs3.CampanhasController` 绕119线 的grails-app \控制器\ VS3 \ CampanhasController.groovy
第119行,在这种情况下是def oldImg = new File(oldImgPath)
我已打印oldImgPath
,结果是:
C:\ Grails_IDE \工作空间\ VS3 \ web应用\图像\横幅\ fc712691a63824948c11a19569682803.jpg
...这个文件存在,我可以正常加载我的浏览器。
UP!
我改变了这一行:
def oldImgPath = servletContext.getRealPath("images/banners/${banner.image}")
至
def oldImgPath = servletContext.getRealPath("web-app/images/banners/${banner.image}")
......我有同样的错误。
而且,以防万一,import org.codehaus.groovy.grails.web.context.ServletContextHolder was already included
。
在那之前,我还应该检查什么?
答案 0 :(得分:1)
您在第一个def oldImgPath
- 块的范围内定义了if
,因此它在其外的任何地方都不可见