精通Grails: 文件上传和Atom联合 - 编程入门网
ryInstance:entryInstance])
}}
精通Grails: 文件上传和Atom联合(5)时间:2011-08-02 IBM Scott Davis在 Web root 下创建 payload/jsmith 目录后,就可以使用 uploadedFile.transferTo() 方法将文件 保存到磁盘。File.mkdirs() 方法是无损的,所以可以多次调用该方法,而不必担心当目录已经存在时会 丢失已有的文件。 接下来,将一个 String 字段添加到 Entry 类,以存储 filename,如清单 9 所示。注意要添加一个 约束,使这个新字段同时为 blank(在 HTML 表单中)和 nullable(在数据库中)。 清单 9. 将 filename 字段添加到 Entry 中 class Entry { static constraints = { title() summary(maxSize:1000) filename(blank:true, nullable:true) dateCreated() lastUpdated() } static mapping = { sort "lastUpdated":"desc" } static belongsTo = [author:User] String title String summary String filename Date dateCreated Date lastUpdated} 最后,将 filename 添加到 save 闭包中的 Entry 对象中。清单 10 显示完整的 save 闭包: 清单 10. 将 filename 存储在 Entry 中 def save = { def entryInstance = new Entry(params) entryInstance.author = User.get(session.user.id) //handle uploaded file def uploadedFile = request.getFile(''payload'') if(!uploadedFile.empty){ println "Class: ${uploadedFile.class}" println "Name: ${uploadedFile.name}" println "OriginalFileName: ${uploadedFile.originalFilename}" println "Size: ${uploadedFile.size}" println "ContentType: ${uploadedFile.contentType}" def webRootDir = servletContext.getRealPath ("/") def userDir = new File(webRootDir, "/payload/ ${session.user.login}") userDir.mkdirs() uploadedFile.transferTo( new File( userDir, uploadedFile.originalFilename)) entryInstance.filename = uploadedFile.originalFilename } if(!entryInstance.hasErrors() && entryInstance.save()) { flash.message = "Entry ${entryInstance.id} created" redirect(action:show,id:entryInstance.id) } else { render(view:''create'',model:[entryInstance:entryInstance]) }} 将上传的文件保存到文件系统的另一种方法是将它们直接存储在数据库中。如果在 Entry 中创建一个 名为 payload 的 byte[] 字段,那么可以完全绕过前面添加到 save 闭包的所有定制代码。但是,如果 那样做的话,您将错过下一节中所有的趣事。 精通Grails: 文件上传和Atom联合(6)时间:2011-08-02 IBM Scott Davis显示上传的文件 如果不将上传的文件在某个地方显示出来,那有何意义呢?打开 grails- app/views/entry/_entry.gsp,添加清单 11 中的代码: 清单 11. 用于显示上传的图像的 GSP 代码 <div class="entry"> <span class="entry-date"> <g:longDate>${entryInstance.lastUpdated}</g:longDate> : ${entryInstance.author} </span> <h2><g:link action="show" id="${entryInstance.id}">${entryInstance.title}</g:link></h2> <p>${entryInstance.summary}</p> <g:if test="${entry |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |