gsp页面
<!-- enctype可以去掉……g:uploadForm会映射成普通的带enctype的form-->
<g:uploadForm name="upLoadForm" method="post" enctype="multipart/form-data" controller="websiteOperate" action="uploadFile">
<div class="uploading-icon">
<input id="payload" type="file" name="payload" class="uploading-camera-btn" />上传简历
</div>
</g:uploadForm>
$("#upLoadForm").ajaxSubmit({
type:'POST',
dataType : "json", //异步返回类型定义
success:function (data) {
if(data.success){
}
}
})
controller
//request是multipartHttpServletRequest
def uploadedFile = request.getFile('payload');//payload是页面上file input的name
//uploadedFile是MultipartFile类,参考api:http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html
String originalFilename = uploadedFile.originalFilename; //附件名称
int size = uploadedFile.size; //附件大小
def uploadFileInputStream = uploadedFile.inputStream; //获取流
render ([contentType: "application/json", text: result as JSON]) //异步返回json
配置文件
一开始是在resources.groovy里面配置的,配置如下:
// Place your Spring DSL code here
beans = {
// 默认上传文件大小
multipartResolver(StandardServletMultipartResolver){
maxUploadSize = 41943040 // 40MB
maxInMemorySize = 1048576
}
}
但遇到一个怪问题,就是上传的时候,附件如果小于120kb左右的时候(测试了十几个附件上传才找到的规律……),request.getFile(‘payload’)都会为null,但是在f12里面看请求域里面的东西都是正常的。后来看到一篇文章解决,但没有理解真正原因(文章地址:https://github.com/grails/grails-core/issues/9680【如果有理解的指教一下……】)……根据文章讲解,将原本在resources.groovy里的配置改为在application.yml里进行配置,配置如下:
grails:
controllers:
defaultScope: singleton
upload:
maxRequestSize: 1048576
maxFileSize: 1048576
仅仅发现,第一种配置,用的是CommonsMultipartResolver,而第二种是StandardServletMultipartResolver。