我使用Grails 2.3.8构建一个Web应用程序我有一个功能,我可以上传视频,以便以后下载它们。在我们实现spring安全性之前,下载和上传功能都正常工作。实施后尝试上传视频会出现此错误。
No signature of method: org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper.getFile() is applicable for argument types: (java.lang.String) values: [mp4Name] Possible solutions: getXML(), getPart(java.lang.String), getAt(java.lang.String), getAt(java.lang.String), getLocale(), getJSON()
我看了看这个链接并尝试了它说的但我一直得到同样的错误。 How do I get a MultipartRequest out of a Servlet3SecurityContextHolderAwareRequestWrapper
这是我的表单代码
<div class="fieldcontain ${hasErrors(bean: videoInstance, field: 'fileName', 'error')} required">
<label for="fileName">
<g:message code="video.fileName.label" default="Video Name" />
<span class="required-indicator">*</span>
</label>
<g:textField name="fileName" required="" value="${videoInstance?.fileName}"/>
<div class="fieldcontain ${hasErrors(bean: videoInstance, field: 'mp4File', 'error')} required">
<label for="mp4NameT">
<g:message code="video.videoPath.mp4.label" default="Mp4 Path" />
<span class="required-indicator">*</span>
</label>
<g:textField name="mp4NameT" required="" value="${videoInstance?.mp4File}" readonly=""/>
<input type="file" id="mp4Name" name="mp4Name">
以上是另外四种视频文件类型的相同内容。 f4v,mov,3gp和3gp光。 这是我的视频保存方法
的部分@Transactional
def save() {
def videoInstance = new Video()
bindData(videoInstance, params, [exclude: ['mp4File']])
videoInstance.properties = params
if (videoInstance == null) {
notFound()
return
}
def dest = new File('web-app/videos')
def destOut = "/videos"
if(!dest.exists()) dest.mkdirs()
videoInstance.validate()
MultipartRequest multipartRequest = request as MultipartRequest
MultipartFile mp4F= multipartRequest.getFile('mp4Name')
MultipartFile f4vF= multipartRequest.getFile('f4vName')
MultipartFile movF= multipartRequest.getFile('movName')
MultipartFile gpF = multipartRequest.getFile('gpName')
MultipartFile lightF=multipartRequest.getFile('lightName')
if (mp4F.empty||f4vF.empty||movF.empty||gpF.empty||lightF.empty) {
println 'empty'
flash.message = 'file cannot be empty'
render(view:'_form')
}
else{
println 'not empty'
def mp4Namer=params.fileName+'.mp4'
def f4vNamer=params.fileName+'.f4v'
def movNamer=params.fileName+'.mov'
def gpNamer =params.fileName+'.3gp'
def lightNamer=params.fileName+'_Light.3gp'
videoInstance.mp4File=''+'web-app/videos/'+mp4Namer
mp4F.transferTo( new File('web-app/videos/'+mp4Namer))
videoInstance.f4vFile=''+'web-app/videos/'+f4vNamer
f4vF.transferTo( new File('web-app/videos/'+f4vNamer))
videoInstance.movFile=''+'web-app/videos/'+movNamer
movF.transferTo( new File('web-app/videos/'+movNamer))
videoInstance.gpFile=''+'web-app/videos/'+gpNamer
gpF.transferTo( new File('web-app/videos/'+gpNamer))
videoInstance.lightFile=''+'web-app/videos/'+lightNamer
lightF.transferTo( new File('web-app/videos/'+lightNamer))
}
videoInstance.validate()
if (videoInstance.hasErrors()) {
respond videoInstance.errors, view:'create'
return
}
videoInstance.save flush:true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.created.message', args: [message(code: 'video.label', default: 'Video'), videoInstance.title])
redirect videoInstance
}
'*' { respond videoInstance, [status: CREATED] }
}
}
我已将grails.web.disable.multipart
设为true
是否有一些简单的东西,我错过了使该方法有效。