Grails 文件上传遇到的问题

文件上传( Grails 1.2.1
《技术精解》里面对文件上传的代码非常简练。在 GSP 中将 Pathurl 写成 type=file ,在 Controller Action 中根据 request 读取文件 , 将文件上传到服务器中,在将数据保存在数据库中,但是在运行时却发现应该做个别修正:
1 Action 中文件写入服务器
原代码:
def f = request.getFile("photoUrl") // 获取文件
    def fileName = f.originalFilename  // 获取文件名
    if(!f.empty){
      f.transferTo(new File(servletContext.getRealPath("/file/")+fileName))  // 将文件上传
}
更改代码:
def f = request.getFile("photoUrl")
    def fileName = f.originalFilename
    if(!f.empty){
      f.transferTo(new File(servletContext.getRealPath("/file/")+"\\"+fileName))
}
注:否则文件名会在原有名字前加了一个 file 字符串。
2 Action 中数据绑定
原代码:
goods.properties = params
goods.photoUrl = createLinkTo(dir:”file”,file:filename)
更改代码:
goods.title = params.title  // 分别将 params 中的 Goods 对象的各个属性进行赋值(除 Pathurl 外)
   
      goods.photoUrl = createLinkTo(dir:"file",file:fileName)// 取出在浏览器上访问该文件的 URL
注:在使用 properties 对数据进行绑定时会将 Goods 类的 Pathurl 的属性进行了改变,导致了在持久化前的校验失败。所以此处改为一个个的赋值。这个方法比较笨,希望有人能提供更好的方法实现数据绑定。

修改(2010-5-15):在最近的学习中发现,在绑定数据时可以使用以下方式赋值:
1)goods.properties["goodsname",'desc'] = params//此时将只绑定goodsname, desc这2个只定的参数,其他参数则不考虑
2)bindData 方法同样允许你排除某些你不想更新的参数
bindData(goods, params, [exclude:'photoUrl'])   //除了指定的‘photoUrl’其他参数都参与绑定
bindData(goods, params, [include:['goodsname','desc]])//只绑定指定的这2个参数

你可能感兴趣的:(文件上传,职场,grails,休闲)