1、将附件 grails-kindeditor.rar 带目录解压到web-app目录
2、gsp文件代码:
<head> <script charset="utf-8" src="${resource(dir: 'kindeditor', file: 'kindeditor.js')}"></script> <script> KE.show({ id : 'repost_content', resizeMode : 1, allowPreviewEmoticons : false, allowUpload : true, imageUploadJson : '${createLink(action:'uploadimagejson')}', attachUploadJson : '${createLink(action:'uploadattachjson')}', items : [ 'fontname', 'fontsize', '|', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|', 'emoticons', 'image', 'attach', 'flash', 'link'] }); </script> </head> <body> <g:textArea id="repost_content" name="content" rows="500" cols="400"/> </body>
3、action代码:
本来是使用对象封装了文件部分属性,这里假定Attach对象有originalName属性,再使用最简单的saveFile,getFile闭包实现
import grails.converters.JSON def uploadattachjson = { def text = [error: 1, message: '请选择文件。'] as JSON if (params.attachFile) { def attach = savePic(params.attachFile) text = [error: 0, url: createLink(action: 'downattach', id: attach.id)] as JSON } render(contentType: 'text/html; charset=UTF-8', text: text) } def downattach = { def attach = getFile(params.id) if (attach.exists()) { response.setContentType("application/octet-stream") response.setHeader("Content-disposition", "attachment;filename=${getFileName(attach.originalFilename)}" ) response.setContentLength(attach.length() as int) response.outputStream.write(attach.bytes) } else { response.sendError(404) } } def getFileName = { String agent = request.getHeader('USER-AGENT') if (null != agent && -1 != agent.indexOf('MSIE')) { URLEncoder.encode(it, 'UTF8') } else { MimeUtility.encodeText(it, 'UTF8', 'B') } } def saveFile = { def attach = new Attach() attach.originalName = it.originalFilename it.transferTo( new File('c:\attach\'+it.originalFilename) ) attach.save() } def getFile = { def attach = Attach.get(it) new File('c:\attach\'+attach.originalName) }