grails文件上传下载
程序员文章站
2022-07-05 09:56:46
...
//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}条 <g:paginate total="${count?:0}" params="${params}"/> </div> </div> <br/> <g:link controller="upload" action="index">返回</g:link> </body>
上一篇: grails文件上传下载
下一篇: (转)九句良言胜敲十年代码