美文网首页
Grails3文件上传小demo

Grails3文件上传小demo

作者: 静静黑夜 | 来源:发表于2017-11-15 13:08 被阅读0次

    创建项目,然后在build.gradle中引入:

    compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.3'
    
    compile group: 'commons-io', name: 'commons-io', version: '2.5'
    

    创建一个名为FileResource的域类(domain),用来保存文件信息

    package com.system
    
    /**
    
    * 文件资源
    
    */
    
    class FileResource {
    
    //文件编号
    
    String uuid
    
    //原文件名
    
    String oldName
    
    //新文件名
    
    String newName
    
    //相对路径
    
    String relPath
    
    //绝对路径
    
    String absolutePath
    
    FileResource(String oldName, String newName, String relPath, String absolutePath) {
    
    this.uuid = UUID.randomUUID().toString()
    
    this.oldName = oldName
    
    this.newName = newName
    
    this.relPath = relPath
    
    this.absolutePath = absolutePath
    
    }
    
    static constraints = {
    
    uuid unique: true
    
    }
    
    static mapping = {
    
    version false
    
    }
    
    def beforeInsert() {
    
    uuid = UUID.randomUUID().toString()
    
    }
    
    }
    
    创建UploadController类
    
    package com.system
    
    import grails.converters.JSON
    
    import grails.transaction.Transactional
    
    class UploadController {
    
    def index() {
    
    }
    
    @Transactional
    
    def upload() {
    
    def info = [result:false,msg: "文件上传失败!"]
    
    try {
    
    def file = request.getFile("file")
    
    //原文件名
    
    String oldName = file.getOriginalFilename()
    
    //用时间戳作为新文件名
    
    String newName = System.currentTimeMillis()+oldName.substring(oldName.lastIndexOf(".",oldName.length()-1))
    
    //文件保存相对路径
    
    String path = "/upload"
    
    //文件保存绝对路径
    
    String dirPath = request.getSession().getServletContext().getRealPath(path)
    
    File saveFile = new File(dirPath)
    
    if(!saveFile.exists()){
    
    saveFile.mkdirs()
    
    }
    
    if(file){
    
    //上传文件
    
    file.transferTo(new File(dirPath + File.separator + newName))
    
    //文件上传成功后,文件信息录入文件信息表
    
    FileResource fr = new FileResource(oldName,newName,path,dirPath)
    
    fr.save(failOnError:true,flash:true)
    
    info.result = true
    
    info.msg = "文件上传成功!"
    
    }
    
    } catch (e) {
    
    log.error("文件上传失败,errorMsg={}",e)
    
    }
    
    //返回json
    
    render info as JSON
    
    }
    
    }
    

    我这里文件上传插件用的layui2.0的,请到layui官网:http://www.layui.com/自行下载,也可以用其他上传插件 下载后,复制里面的layui到grails-app/assets/javascripts下面,目录结构如下:

    ├─grails-app
    
    │  ├─assets
    
    │  │  ├─images
    
    │  │  │  └─skin
    
    │  │  ├─javascripts
    
    │  │  │  └─layui
    
    │  │  │      ├─css
    
    │  │  │      │  └─modules
    
    │  │  │      │      ├─laydate
    
    │  │  │      │      │  └─default
    
    │  │  │      │      └─layer
    
    │  │  │      │          └─default
    
    │  │  │      ├─font
    
    │  │  │      ├─images
    
    │  │  │      │  └─face
    
    │  │  │      └─lay
    
    │  │  │          └─modules
    
    │  │  └─stylesheets
    
    

    在grails-app/views下面创建upload/index.gsp,页面内容:

    <!DOCTYPE html>
    <html>
    <head>
       <meta charset="utf-8">
       <title>upload模块快速使用</title>
       <asset:stylesheet href="layui/css/layui.css"/>
    </head>
    <body>
    
    <button type="button" class="layui-btn" id="fileUpload">
       <i class="layui-icon">&#xe67c;</i>上传图片
    </button>
    
    <asset:javascript src="layui/layui.js"/>
    <script>
       layui.use(['upload', 'layer'], function(){
           var upload = layui.upload;
           var layer = layui.layer;
    
           //执行实例
           var uploadInst = upload.render({
               elem: '#fileUpload' //绑定元素
               ,url: '${createLink(controller: "upload", action: "upload")}' //上传接口
               ,done: function(res){
                   //上传完毕回调
                   layer.msg(res.msg);
               }
               ,error: function(){
                   //请求异常回调
               }
           });
       });
    </script>
    </body>
    </html>
    
    

    在grails-app/conf/application.yml最后面配置grails文件上传限制大小(200M):

    ---
    
    grails:
    
    controllers:
    
    upload:
    
    maxFileSize: 2000000
    
    maxRequestSize: 2000000```
    
    到此配置已经ok,启动项目,访问:[http://localhost:8080/upload/index](http://localhost:8080/upload/index)进行测试
    
    注意事项:
    
    

    1、如果不配置文件上传大小限制,默认限制大小为128kb,超过就会报错

    2、页面引入js和css方式最好用:

    <asset:stylesheet href="xxx.css"></asset:stylesheet>
    
    <asset:stylesheet src="xxx.js"></asset:stylesheet>
    
    且一般css放head里面,js放前面
    
    

    相关文章

      网友评论

          本文标题:Grails3文件上传小demo

          本文链接:https://www.haomeiwen.com/subject/wwvcvxtx.html