10

我正在尝试在我的 gsp 中上传 grails 中的文件,我有:

<g:form id="update" url="[action: 'updateStatus',]">
     <g:textArea name="message" value="" cols="3" rows="1"/><br/>
     <g:textField id="tagField" name="tag" value=""/><br/>
     <input id="inputField" type="file" name="myFile" enctype="multipart/form-data" />
     <g:submitButton name="Update Status"/>
 </g:form>

在我的控制器中,我有:

 def updateStatus(String message) {

        if (params.myFile){
            def f = request.getFile('myFile')

        }

请求获取文件失败并出现以下错误:

No signature of method: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile() is applicable for argument types: (java.lang.String) values: [myFile]

任何想法为什么这是我所拥有的并且正在我的其他控制器中使用 getFile ,它工作正常。

4

3 回答 3

8

这是工作文件提交:

形式(gsp)

<form method="post" enctype="multipart/form-data">
<p><input type='file' name="cfile"/></p>
<input type='submit'>
</form>

将提交的文件存储到“D:/submitted_file”的控制器:

def index() {
    if(params.cfile){
        if(params.cfile instanceof org.springframework.web.multipart.commons.CommonsMultipartFile){
            new FileOutputStream('d:/submitted_file').leftShift( params.cfile.getInputStream() );
            //params.cfile.transferTo(new File('D:/submitted_file'));
        }else{
            log.error("wrong attachment type [${cfile.getClass()}]");
        }
    }
}

这对我有用(grails 2.0.4)

于 2012-09-16T11:04:24.280 回答
4

您需要enctype="multipart/form-data"g:form标签上使浏览器使用多部分请求。

于 2012-09-15T16:36:24.263 回答
0

为了上传文件,您必须在表单上设置enctype 。为此,您可以使用<g:uploadForm>与标准表单标签相同的标签,只是它自动enctype属性设置为“multipart/form-data”。

我更喜欢使用Grails Selfie PluginImage / File Upload Plugin将文件附加到您的域模型、上传到 CDN、验证内容或生成缩略图。

领域

import com.bertramlabs.plugins.selfie.Attachment

class Book {
   String name
   Attachment photo

   static attachmentOptions = [
       photo: [
           styles: [
              thumb: [width: 50, height: 50, mode: 'fit'],
              medium: [width: 250, height: 250, mode: 'scale']
          ]
       ]
   ]

   static embedded = ['photo'] //required

   static constraints = {
      photo contentType: ['image/jpeg','image/png'], fileSize:1024*1024 // 1mb
   }
}

普惠制

<g:uploadForm name="myUpload" controller="upload" action="updateStatus">
    <input type="file" name="myFile" />
</g:uploadForm>

控制器

class PhotoController {
   def upload() {
      def photo = new Photo(params)
      if(!photo.save()) {
         println "Error Saving! ${photo.errors.allErrors}"
      }
      redirect view: "index"
   }
}

来源

1.上传来源

2.自拍插件

于 2016-08-31T17:56:53.393 回答