Grails 将视频文件上载到web应用程序时遇到困难
我使用Grails2.3.8构建了一个web应用,我有一个功能,可以上传视频,以便以后下载。在我们实现spring安全性之前,下载和上传功能都正常工作。实现后,尝试上载视频会出现此错误Grails 将视频文件上载到web应用程序时遇到困难,grails,upload,spring-security,Grails,Upload,Spring Security,我使用Grails2.3.8构建了一个web应用,我有一个功能,可以上传视频,以便以后下载。在我们实现spring安全性之前,下载和上传功能都正常工作。实现后,尝试上载视频会出现此错误 No signature of method: org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper.getFile() is
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()
我看了一下这个链接,并尝试了它所说的,但我一直得到相同的错误
这是我的表格代码
<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}"/>
我已经将grails.web.disable.multipart
设置为true
我是否缺少一些简单的方法来实现该方法。您使用的是g:form还是g:uploadForm?
<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">
@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] }
}
}