领域类的定义:
class SiteFile {
//属性定义
String name
String type
byte[] data //100m
//关系定义
//static hasMany = [] //一对多关系
//约束定义
static constraints = {
name(nullable:false,size:1..1000)
type(nullable:false,size:1..1000)
data(nullable:false,size:1..100000000)
}
//其他方法/闭包定义
String toString(){
name
}
//init form a MultipartFile
void bindFile(file){
this.name = file.originalFilename
this.type = file.contentType
this.data = file.bytes
}
}
文件上传:
def save = {
//保存文件信息
def file = request.getFile('data')
//def siteFileInstance = new SiteFile(params)
//siteFileInstance.name = file.originalFilename
//siteFileInstance.type = file.contentType
def siteFileInstance = new SiteFile()
siteFileInstance.bindFile(file)
if (siteFileInstance.save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'siteFile.label', default: 'SiteFile'), siteFileInstance.id])}"
redirect(action: "show", id: siteFileInstance.id)
}
else {
render(view: "create", model: [siteFileInstance: siteFileInstance])
}
}
文件下载:
def download = {
def f = SiteFile.get(params.id)
if(f){
response.setContentType(f.type);
response.setContentLength((int)f.data.size());
response.setHeader("Content-Disposition", "attachment;filename=/""
+java.net.URLEncoder.encode(f.name,"UTF-8")+"/"");
response.outputStream << f.data
}else{
render 'no file'
}
}
页面:
<g:uploadForm>
<input type="file" id="data" name="data"/>
</g:uploadForm