grails 文件的上传和下载

领域类的定义:


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值