快速业务通道

精通Grails: 文件上传和Atom联合 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号