修正Grails in Action中上传文件的方法

Grails in Action 中给出了上传文件的方法,但好像有点问题,改过的如下所示:

1. 上传够保存到数据库的方式
    默认情况下,grails的 byte[] 在mysql中使用的是tinyblob,所以当上传大文件的时候就出现错误。
最简单的办法:
   直接手动把数据库该字段的类型从tinyblob改成longblob,但是注意DataSouce中的dbCreate方式要改成“update”
    development {
        dataSource {
            dbCreate 
= "update" // one of 'create', 'create-drop','update'
            //url = "jdbc:hsqldb:mem:devDB"
            driverClassName = "com.mysql.jdbc.Driver"
            username 
= "root"
            password 
= "dens"
            url 
= "jdbc:mysql://localhost:3306/hubbub?useUnicode=true&characterEncoding=utf8"
        }
    }


2. 上传后保存到文件的方式

   服务器端:  ImageController中的action 为rawUpload, 主要是增加了获取rootPath以及params.id,然后保存.

    def rawUpload = {
        def mhsr 
= request.getFile('photo')
        def rootPath 
= this.servletContext.getRealPath(""
        
        
if(!mhsr?.empty && mhsr.size < 1024*20000) {
             mhsr.transferTo(
                
new File("$rootPath/images/upload/${params.userId}/mugshot.gif") )
        }
    }

   客户端:  主要是增加了请求格式enctype="multipart/form-data"
 1 <html>
 2     <head>
 3         <title>Upload Image</title>
 4         <meta name="layout" content="main"/>
 5     </head>
 6     <body>
 7     
 8       <g:uploadForm action="rawUpload" enctype="multipart/form-data">
 9             User Id:
10             <g:select name="userId" from="${com.grailsinaction.User.list()}"
11                       optionKey="userId" optionValue="userId" />
12             <p/>
13             Photo: <input name="photo" type="file" />
14             <g:submitButton name="upload" value="Upload"/>
15         </g:uploadForm>
16 </body>
17 </html>

posted on 2010-08-11 16:48 想飞就飞 阅读(1727) 评论(0)  编辑  收藏 所属分类: 读书笔记J2EEGroovy/Grails


只有注册用户登录后才能发表评论。


网站导航:
 

公告


导航

<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(13)

我参与的团队

随笔分类(69)

随笔档案(68)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜