修正Grails in Action中上傳文件的方法
Grails in Action 中給出了上傳文件的方法,但好像有點問題,改過的如下所示:
1. 上傳夠保存到數據庫的方式
默認情況下,grails的 byte[] 在mysql中使用的是tinyblob,所以當上傳大文件的時候就出現錯誤。
最簡單的辦法:
直接手動把數據庫該字段的類型從tinyblob改成longblob,但是注意DataSouce中的dbCreate方式要改成“update”
2. 上傳后保存到文件的方式
服務器端: ImageController中的action 為rawUpload, 主要是增加了獲取rootPath以及params.id,然后保存.
客戶端: 主要是增加了請求格式enctype="multipart/form-data"
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"
}
}
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") )
}
}
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>
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 想飛就飛 閱讀(1748) 評論(0) 編輯 收藏 所屬分類: 讀書筆記 、J2EE 、Groovy/Grails