上传文件,Grails使用Spring's MultipartHttpServletRequest接口实现上传。文件上传的第一步是创建multipart form,具体代码如下:
Upload Form: <br />
<g:uploadForm action="upload">
<input type="file" name="myFile" />
<input type="submit" />
</g:uploadForm>
与普通<g:form> 相比,uploadForm 增加了enctype="multipart/form-data"属性。处理上传请求的方法如下:
def upload() {
def f = request.getFile('myFile')
if (f.empty) {
flash.message = 'file cannot be empty'
render(view: 'uploadForm')
return
}
f.transferTo(new File('/some/local/dir/myfile.txt'))
response.sendError(200, 'Done')
}
在模型进行数据绑定的过程中,也可对上传文件的大小进行限制,具体方式如下:
class Image {
byte[] myFile
static constraints = {
// Limit upload file size to 2MB
myFile maxSize: 1024 * 1024 * 2
}
}
你也可以这样去写:
def img = new Image(params) //params.myFile,会自动进行格式转化并进行绑定
设置size或maxSize是很必要的,因为默认情况下数据类型将是blob,即最大仅支持255字节
当然,也可以将数据类型转化为String类型,这可以可以的
################
默认情况下,所有字段的约束都是nullable: false的,如果想改成nullable: true的话,可使用以下方法:
class AuthorSearchCommand implements grails.validation.Validateable {
String name
Integer age
static boolean defaultNullable() {
true
}
}
################
处理重复的变大提交(同步令牌模式),在页面的form中加入useToken="true":
<g:form useToken="true" ...>
在控制器Controller的方法Action中加入:
withForm {
// good request
}.invalidToken {
// bad request
}
#################
格式转换与附加默认值的格式转换:
def total = params.int('total') //boolean, long, char, short....
def total = params.int('total', 42) //total存在则进行转换,不存在则返回42
参数数组的处理:
for (name in params.list('name')) {
println name
}
##################
错误处理实现:
// grails-app/controllers/lvchanglong/DemoController.groovy
package lvchanglong
class DemoController {
def someAction() {
// do some work
}
def handleSQLException(SQLException e) {
render 'A SQLException Was Handled'
}
def handleBatchUpdateException(BatchUpdateException e) {
redirect controller: 'logging', action: 'batchProblem'
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)