2014-02-13 50 views
3

我正在實現帶有輸入字段和文件上傳的簡單表單。 我去了教程:http://grails.org/Simple+Avatar+Uploader 和文檔:http://grails.org/doc/2.0.x/guide/theWebLayer.html#uploadingFilesGrails上傳文件沒有方法的簽名getFile()

然而,文件上傳似乎並沒有工作! 爲什麼它不起作用?任何解決方案的問題?

問題:

法無簽名: org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 適用於參數類型:(java.lang.String中)值: [itemImage]可能的解決方案:getXML(),getPart(java.lang.String), getAt(java.lang.String),getAt(java.lang.String),getLocale(), getJSON()。堆棧跟蹤如下:消息:方法的無簽名: org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 適用於參數類型:(java.lang.String中)值: [itemImage]可能的解決方案:getXML(),getPart(java.lang.String), getAt(java.lang.String),getAt(java.lang.String),getLocale(), getJSON()Line |方法 - >> 14 | save in greatoffer.SellController $$ EOVmPG4d - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter | 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter | 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter | 49 | doFilter in grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter | 82 | doFilter grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter | 895 | java.util.concurrent.ThreadPoolExecutor中的runTask $ Worker | 918 |在''^ 662 |中運行跑 。 。在java.lang.Thread中

主要GSP:表單GSP的

<g:uploadForm action="save" method="POST"> 
    <fieldset class="form"> 
     <g:render template="form"/> 
    </fieldset> 
    <fieldset class="buttons"> 
     <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> 
    </fieldset> 
</g:uploadForm> 

圖像上載部分:

<label for="images"> 
    <g:message code="item.images.label" default="Images" /> 
</label> 

<input type="file" name="itemImage" /> 

控制器:

import grails.plugin.springsecurity.annotation.Secured 

@Secured('permitAll') 
class SellController { 

    def index() { 
     render(view: "seller") 
    } 

    def save() { 
     println "Here are params: ${params}"; 
     def f = request.getFile('itemImage') 
     flash.message = message(code: 'default.created.message', args: [message(code: 'item.label', default: 'Item'), params.id]) 
     render(view: "seller") 
    } 
} 
+1

我敢打賭,它不會使用@Secured('permitAll')註釋。 – lukelazarovic

+1

猜測@lukelazarovic可能是某種東西 - 因爲getFile方法是MultipartRequest的一部分,但可能不是安全性的一部分。 http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/multipart/MultipartRequest.html#getFile(java.lang.String)不是在這個類似乎是該請求的類http://docs.spring.io/spring-security/site/apidocs/org/springframework/security/web/servletapi/SecurityContextHolderAwareRequestWrapper.html – mikemil

回答

5

由式中你的堆棧跟蹤,Spring Security @Secured註解正在包裝你的請求一個SecurityContextHolderAwareRequestWrapper。您需要登錄MultipartHttpServletRequest來調用getFile我相信。

此外,在您的調試這裏是params聲明,你看到itemImage?如果是這樣,我實際上認爲這可能很簡單。

def file = params.itemImage 

更新:我upvoted的意見。當我開始打字時,他們不在那裏。

+0

謝謝老兄!此外,我再次審查了所有的代碼,我承認我是白癡並犯了一個錯誤 - 修改了錯誤的GSP頁面。 – MeIr

+1

我有類似的問題。你有沒有關於如何從SecurityContextHolderAwareRequestWrapper獲取MultipartHttpServletRequest的提示? – Tobia

相關問題