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

修正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 >

你可能感兴趣的:(修正Grails in Action中上传文件的方法)