【问题标题】:Grails request.getFile always returning nullGrails request.getFile 总是返回 null
【发布时间】:2015-12-28 09:53:50
【问题描述】:

我一直在尝试提交包含多个输入(文本和一个图像)的表单,但我无法从请求中检索图像(Grails 3.0.4)

我的 create.gsp 看起来像这样:

<g:uploadForm controller="advertisement" action="save">

   <input name="name" type="text" id="advertisement_name" />

   <input name="link" type="text" id="advertisement_url" />

   <input id="add_banner_image" name="myimage" type="file" accept="image/png,image/jpeg" data-max-size="512000"/>

   <g:submitButton name="save" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent" value="Salvar anúncio">
   </g:submitButton>

</g:uploadForm>

我的浏览器显示正确的请求负载:

------WebKitFormBoundarysaAgHUi2q9vTfkkY
Content-Disposition: form-data; name="name"

Filipe
------WebKitFormBoundarysaAgHUi2q9vTfkkY
Content-Disposition: form-data; name="link"

https://www.filipescosta.com
------WebKitFormBoundarysaAgHUi2q9vTfkkY
Content-Disposition: form-data; name="imagemlouca"; filename="exemplo.jpeg"
Content-Type: image/jpeg


------WebKitFormBoundarysaAgHUi2q9vTfkkY
Content-Disposition: form-data; name="save"

Salvar anúncio

我的 resources.groovy 看起来像这样:

beans = {
    multipartResolver (org.springframework.web.multipart.commons.CommonsMultipartResolver) {
        maxUploadSize=2500000
    }
}

我的 application.yml 看起来像这样:

grails:
mime:
    disable:
        accept:
            header:
                userAgents:
                    - Gecko
                    - WebKit
                    - Presto
                    - Trident
    types:
        all: '*/*'
        atom: application/atom+xml
        css: text/css
        csv: text/csv
        form: application/x-www-form-urlencoded
        html: 
          - text/html
          - application/xhtml+xml
        js: text/javascript
        json:
          - application/json
          - text/json
        multipartForm: multipart/form-data
        pdf: application/pdf
        rss: application/rss+xml
        text: text/plain
        hal: 
          - application/hal+json
          - application/hal+xml
        xml:
          - text/xml
          - application/xml
urlmapping:
    cache:
        maxsize: 1000
controllers:
    defaultScope: singleton
converters:
    encoding: UTF-8
views:
    default:
        codec: html
    gsp:
        encoding: UTF-8
        htmlcodec: xml
        codecs:
            expression: html
            scriptlets: html
            taglib: none
            staticparts: none

我的控制器如下所示:

def save() {
    println request.getFile('myimage')
    println "Request class: ${request.class}"
    [...]

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.created.message', args: [message(code: 'advertisement.label', default: 'Advertisement'), advertisement.id])
            redirect(uri:'/')
        }
        '*' { respond advertisement, [status: CREATED, formats:['html']] }
    }
}

但在控制台中,println 消息是:

null
Request class: class org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest

任何人都可以看看并帮助我一些技巧吗?我一直在搜索示例,但找不到任何帮助。

【问题讨论】:

    标签: spring-mvc grails groovy grails-controller grails-3.0


    【解决方案1】:

    您定义:属性名称="myimage" 并尝试使用大写名称 -> request.getFile('myImage')

    【讨论】:

    • 哦,这是复制/粘贴错误。我没有在我的代码中错过它,但我弄清楚了这里发生了什么。
    【解决方案2】:

    嗯,我知道是怎么回事了。

    我试图创建一个字符串类型的新对象,但我正在发送一个输入文件类型作为参数。 然后,在尝试将输入类型 String 设置为文件类型后,代码中断,我无法打印 request.getFile 的值。

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 2016-11-02
      • 2014-05-06
      • 2012-06-05
      • 2014-05-30
      • 2014-02-23
      • 2017-10-12
      • 2013-08-16
      • 2016-03-28
      相关资源
      最近更新 更多