2016-07-23 35 views
0

默認腳手架工作在Grails的3.1.19我創建了一個域類具有以下字段文件上傳不Grails中

byte[] caCert. 

當訪問生成創建行動,我收到了文件瀏覽對話框,並上傳文件。點擊創建時,我得到 caCert is type-mismatched

看着PARAMS對象看來,我只是獲取文件的名稱是一個字符串。使用默認的腳手架,我如何獲得byte []字段來實際獲取我上傳的文件的內容?在創建控制器代碼是

def create() { 
    respond new TaskUser(params) 
} 

而且節省控制器動作

def save(TaskUser taskUser) { 
    if (taskUser == null) { 
     transactionStatus.setRollbackOnly() 
     notFound() 
     return 
    } 

    if (taskUser.hasErrors()) { 
     transactionStatus.setRollbackOnly() 
     respond taskUser.errors, view:'create' 
     return 
    } 

    taskUser.save flush:true 

    request.withFormat { 
     form multipartForm { 
      flash.message = message(code: 'default.created.message', args: [message(code: 'taskUser.label', default: 'TaskUser'), taskUser.id]) 
      redirect taskUser 
     } 
     '*' { respond taskUser, [status: CREATED] } 
    } 
} 

的創建模板的形式,一部分是低於

<div id="create-taskUser" class="content scaffold-create" role="main"> 
    <h1><g:message code="default.create.label" args="[entityName]" /></h1> 
    <g:if test="${flash.message}"> 
    <div class="message" role="status">${flash.message}</div> 
    </g:if> 
    <g:hasErrors bean="${this.taskUser}"> 
    <ul class="errors" role="alert"> 
     <g:eachError bean="${this.taskUser}" var="error"> 
     <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li> 
     </g:eachError> 
    </ul> 
    </g:hasErrors> 
    <g:form action="save"> 
     <fieldset class="form"> 
      <f:all bean="taskUser"/> 
     </fieldset> 
     <fieldset class="buttons"> 
      <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> 
     </fieldset> 
    </g:form> 
</div> 
+0

雖然你沒有顯示任何代碼,看起來像你做錯了什麼。 params。「fileuploadparam」應該返回byte []。您可以請分享腳手架控制器操作和您綁定的任何域。 –

回答

3

我希望這會增加一些價值。

這裏一直在努力解決同樣的問題。 使用byte []類型的屬性創建一個基本Domain類並運行默認腳手架。

嘗試保存實例時,獲取「類型不匹配」驗證消息。

基於Gorille的答案我檢查的文件和屬性ENCTYPE = 「的multipart/form-data的」增加了G:形式標籤會使它的工作原理。 不知道爲什麼腳手架不能處理。

<g:form action="save" enctype="multipart/form-data"> 

其他選項,如他所說,是將標籤更改爲G:uploadForm,這看起來是專門爲。

Doc:

的uploadForm標籤方便地添加ENCTYPE = 「多部分/格式數據」 屬性添加到標準標記。

Tag doc

uploadForm:相同,不同之處在於它設置ENCTYPE標準形式標籤屬性爲 「multipart/form-data的」 自動。

我檢查了參數,它有完整的文件。

1

它看起來像你這樣everyhing按the documention

也許你可以嘗試改變你的模板,包括一個uploadForm標籤?

<g:uploadForm action="upload"> 
     <input type="file" name="myFile" /> 
     <input type="submit" /> 
</g:uploadForm>