将视频文件上传到网络应用程序很困难

时间:2014-10-14 20:50:50

标签: grails upload spring-security

我使用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 是否有一些简单的东西,我错过了使该方法有效。

0 个答案:

没有答案