`

grails文件上传下载

 
阅读更多
//1.controller
package com.xdth

class UploadController {

    def index() {
        render(view:"../index")
    }

    /**
     * 文件上传
     * @return
     */
    def upload(){
        /*定义文件上传基本目录*/
        def path = "/upload"
        def basePath = request.getSession().getServletContext().getRealPath(path)

        //检查upload是否存在
        File saveFile = new File(basePath)
        if(!saveFile.exists()){
            saveFile.mkdirs()
        }

        def description = params["description"]
        def file = request.getFile("myFile")
        //上传文件原文件名
        def oldName = file.getOriginalFilename()

        if(file){
            //用时间戳作为新文件名
            def newName = System.currentTimeMillis()+oldName.substring(oldName.lastIndexOf(".",oldName.length()-1))

            //上传文件开始
            file.transferTo(new File(basePath+File.separator+newName))
            Upload upload = new Upload(oldName,newName,basePath,description)
            upload.save()
        }

        flash.message = "${oldName} 上传成功!"
        //从一个action跳转到另一个action
        redirect action:"show",model: [params:params]
    }

    /**
     * 文件下载
     * @return
     */
    def download(){
        def upload = Upload.findById(params.id)
        //File.separator根据当前系统自动获取盘符
        def downloadPath = upload.filePath+File.separator+upload.newName
        def file_name = upload.newName

        def bis = new BufferedInputStream(new FileInputStream(downloadPath))
        def bos = new BufferedOutputStream(response.outputStream)

        long fileLength = new File(downloadPath).length()

        response.setCharacterEncoding("UTF-8")
        response.setContentType("multipart/form-data")

        String userAgent = request.getHeader("User-Agent").toLowerCase()

        if (userAgent.contains("msie") || userAgent.contains("like gecko"))
        {
            // win10 ie edge 浏览器 和其他系统的ie
            file_name = URLEncoder.encode(file_name, "UTF-8")
        }
        else
        {
            file_name = new String(file_name.getBytes("UTF-8"), "iso-8859-1")
        }

        response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", file_name))
        response.setHeader("Content-Length", String.valueOf(fileLength))

        byte[] buff = new byte[2048]
        int bytesRead
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length)))
        {
            bos.write(buff, 0, bytesRead)
        }
        bis.close()
        bos.close()
    }

    /**
     * 全部文件查看
     * @return
     */
    def show(){
        def max = Math.min(params.max ? params.max.toInteger() : 10, 100)
        def offset = params.offset ? params.offset.toInteger() : 0

        def queryList = Upload.executeQuery("from Upload",[max:max,offset:offset]).asList()
        respond queryList,view: "show",model: [queryList:queryList,params:params,count:queryList.size()]
    }
}

 

2.index.gsp

<body>

    <div>
        <g:form controller="upload" action="upload" method="post" enctype="multipart/form-data">
        <table>
            <tr>
                <td><input type="file" name="myFile"></td>
                <td>文件描述:<textarea maxlength="50" name="description"></textarea></td>
            </tr>
            <tr>
                <td colspan="2"><button type="submit">上传文件</button></td>
            </tr>
        </table>
        </g:form>
    </div>

    <div>
        <g:link controller="upload" action="show">查看全部文件</g:link>
    </div>

</body>

 

3.show.gsp

    <body>
        <div class="nav" role="navigation">
            ${flash.message}
        </div>
    <div class="nav">
        <g:form action="show">
        <table>
            <tr>
                <g:sortableColumn property="id" action="show" title="id" params="${params}"/>
                <g:sortableColumn property="oldName" action="show" title="原文件名" params="${params}"/>
                <g:sortableColumn property="newName" action="show" title="现文件名" params="${params}"/>
                <g:sortableColumn property="description" action="show" title="文件描述" params="${params}"/>
                <td>操作</td>
            </tr>
            <g:each in="${queryList}" var="it">
                <tr>
                    <td>${it.id}</td>
                    <td>${it.oldName}</td>
                    <td>${it.newName}</td>
                    <td>${it.description}</td>
                    <td><g:link action="download" id="${it.id}">下载</g:link></td>
                </tr>
            </g:each>
        </table>
        </g:form>
    </div>
    <div class="panel-footer">
        <div class="pagination">
            <!--分页标签默认显示10条-->
            共${count?:0}条 &nbsp;&nbsp;
            <g:paginate total="${count?:0}" params="${params}"/>
        </div>
    </div>
    <br/>
    <g:link controller="upload" action="index">返回</g:link>
    </body>

 

 

分享到:
评论

相关推荐

    grails中的上传,下载

    在Grails框架中,文件的上传与下载是常见的功能需求,尤其在开发涉及大量文档、图片或媒体文件处理的应用程序时。以下是对Grails中上传和下载操作的深入解析,包括其实现机制、代码示例及注意事项。 ### 文件上传 ...

    Grails结合uploadify上传文件的简单代码

    在本文中,我们将深入探讨如何在Grails框架中结合uploadify插件实现文件上传功能。Grails是一款基于Groovy语言的、高效的Web应用开发框架,它简化了Java平台上的开发流程。uploadify则是一个JavaScript库,它允许...

    grails 文档

    本文档将带你深入理解Grails的核心概念、主要特性以及实践技巧。 1. **Groovy 语言基础** Groovy 是Java平台上的动态脚本语言,它与Java语法兼容,但更加简洁,支持闭包和元编程。在Grails中,Groovy用于编写控制...

    Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺 getting started with grails chinese Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺 getting started with ...

    grails 中文文档+grails-fckeditor-0.9.5.zip插件

    3. 扩展性:FCKEditor插件可以与其他Grails插件(如文件上传插件)配合使用,提供更强大的功能,如图片管理和多媒体资源管理。 4. 版本兼容:虽然grails-fckeditor-0.9.5是较旧的版本,但理解其工作原理有助于我们...

    grails 中文第二版

    ### Grails框架中文第二版...- 支持上传文件,简化了文件上传逻辑。 - 支持命令对象,用于封装复杂的表单数据。 - 支持处理重复的表单提交,防止恶意操作。 - 支持简单类型转换器,用于将字符串转换成特定的数据类型。

    Grails企业web应用开发与部署

    2. 安装配置:首先需要安装Java Development Kit(JDK),然后通过Grails官方下载页面获取最新版本的Grails,并将其添加到系统路径中。 3. 创建项目:使用`grails create-app`命令创建新项目,Grails会自动生成项目...

    grails脚手架2次优化

    你可以修改模板文件,引入CSS库如Bootstrap来美化界面,或者利用jQuery插件增强交互性,例如文件上传、日期选择等。 3. **调整模板逻辑**:在Grails中,模板文件使用Groovy模板语言编写,允许直接嵌入Groovy代码。...

    grails-fck-editor-0.3.zip_grails_grails-fck-editor

    标题中的"grails-fck-editor-0.3.zip_grails_grails-fck-...对于使用Grails开发的Web应用,这个插件可以帮助实现用户友好的富文本编辑功能,同时需要注意描述中提及的安全问题,确保已修复相关漏洞,防止非法文件上传。

    Grails权威指南

     7.10 处理文件上传  7.10.1 使用multipart请求  7.10.2 上传和数据绑定  7.11 本章小结 第8章 groovycservercpages  8.1 基础知识  8.1.1 理解模型  8.1.2 页面指令  8.1.3 ...

    grails-plugin-converters-2.3.1.zip

    将Grails Plugin Converters 2.3.1与Box Java SDK v2 结合,开发者可以在Grails应用中直接处理Box上的文件数据,比如,从Box下载文件并将其转换成特定格式,或者接收用户上传的经过转换的数据并存储到Box账户中。...

    Grails使用FCK Editor(附源码,有截图)

    在Grails中,我们可以使用`params.upload`来访问上传的文件,然后将其保存到指定的目录。 ```groovy def uploadImage = { def file = request.getFile('upload') if (file != null && !file.empty) { def ...

    Grails技术精解与Web开发实践.part1

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails基础教程

    - **处理文件上传**:讲解了如何处理用户上传的图片文件。 - **上传到文件系统**:介绍了如何将文件保存到文件系统。 - **从数据库中递交相片**:探讨了如何将图片数据保存到数据库。 **7.6 通过过滤器拦截请求** ...

    grails-ex-dms:简单的Grails文档管理系统

    - **文档上传与下载**:系统应具备文档上传、预览、下载以及版本控制等功能,确保用户可以方便地管理个人或团队的文档资源。 - **权限管理**:通过角色和权限控制,实现对文档访问的精细化管理,例如,仅特定用户...

    Grails使用FCK Editor实例(附源码和文档)

    - **下载与引入FCK Editor**:首先,你需要从FCK Editor的官方网站下载最新版本的编辑器,然后将其解压到Grails项目的`web-app`目录下的`js`或`lib`子目录。 - **创建Controller**:在Grails中,创建一个用于处理富...

    Grails技术精解与Web开发实践.part2

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    8.2 文件上传的实现 107 8.2.1 开发表单页面 107 8.2.2 在Controller中接收文件 108 8.3 修改订单状态 109 8.4 本章小结 110 第9章 Grails的自动化测试 111 9.1 Grails自动化测试基础知识 111 9.2 编写测试用例 113...

    Grails使用kindeditor,支持附件

    最后,确保你的Grails应用能够处理文件上传,可能需要配置安全设置,例如允许特定的MIME类型和文件大小。同时,你可能还需要考虑文件重命名、存储路径、权限控制等问题。 通过以上步骤,你已经在Grails应用中成功...

Global site tag (gtag.js) - Google Analytics