Image 将图像保存到grails中web app下的文件夹
我需要将图像保存到应用程序中的文件夹中。到目前为止,我已经学会了将图像保存到数据库中,但我需要将其保存到文件夹中。我该怎么做?谁能帮我一下吗?下面是我要保存到数据库中的代码>>>Image 将图像保存到grails中web app下的文件夹,image,grails,grails-2.0,Image,Grails,Grails 2.0,我需要将图像保存到应用程序中的文件夹中。到目前为止,我已经学会了将图像保存到数据库中,但我需要将其保存到文件夹中。我该怎么做?谁能帮我一下吗?下面是我要保存到数据库中的代码>>> def upload={ def user = User.findById(1) CommonsMultipartFile file = params.list("photo")?.getAt(0) user.avatar = file?.bytes user.save() } 在下面的分
def upload={
def user = User.findById(1)
CommonsMultipartFile file = params.list("photo")?.getAt(0)
user.avatar = file?.bytes
user.save()
}
在下面的分步实现中,我添加了一个带有uploadForm的GSP页面(默认情况下,它将有多部分表单提交),然后添加了一个控制器函数来处理文件保存请求,以及一个服务方法来将文件保存在指定目录中: 步骤1:创建文件上载表单:
<g:uploadForm name="picUploadForm" class="well form-horizontal" controller="<your-controller-name>" action="savePicture">
Select Picture: <input type="file" name="productPic"/>
<button type="submit" class="btn btn-success"><g:message code="shopItem.btn.saveProductImage" default="Save Image" /></button>
</g:uploadForm>
步骤3:在文件上传器服务中(在本例中,名称为FileUploadService的用户定义服务):
在下面的分步实现中,我添加了一个带有uploadForm的GSP页面(默认情况下,它将有多部分表单提交),然后添加了一个控制器函数来处理文件保存请求,以及一个服务方法来将文件保存在指定目录中: 步骤1:创建文件上载表单:
<g:uploadForm name="picUploadForm" class="well form-horizontal" controller="<your-controller-name>" action="savePicture">
Select Picture: <input type="file" name="productPic"/>
<button type="submit" class="btn btn-success"><g:message code="shopItem.btn.saveProductImage" default="Save Image" /></button>
</g:uploadForm>
步骤3:在文件上传器服务中(在本例中,名称为FileUploadService的用户定义服务):
您只需将MultiPartFile复制到web app文件夹中即可。这就是为什么:
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myfile");
String fileName = System.currentTimeMillis() + f.name
String destinationFileName = configService.getAbsoluteDocumentsPath() + fileName // We will put it on web-app/documents/xxxxx
f.renameTo(new File(destinationFileName))
//Save filename to database in
user.avatar = fileName
user.save()
在configService中,我使用了它(用于计算路径)
编辑
要确保您的请求是MutipartHttServletRequest的实例,请添加以下测试
if(request instanceof MultipartHttpServletRequest) {
//Do stuff here
}
不要忘记检查用于输入文件的表单的编码。您只需将MultiPartFile复制到web app文件夹中即可。这就是为什么:
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myfile");
String fileName = System.currentTimeMillis() + f.name
String destinationFileName = configService.getAbsoluteDocumentsPath() + fileName // We will put it on web-app/documents/xxxxx
f.renameTo(new File(destinationFileName))
//Save filename to database in
user.avatar = fileName
user.save()
在configService中,我使用了它(用于计算路径)
编辑
要确保您的请求是MutipartHttServletRequest的实例,请添加以下测试
if(request instanceof MultipartHttpServletRequest) {
//Do stuff here
}
别忘了检查文件输入格式的编码。我已经很容易地解决了这个问题,如下所示。您必须导入以下内容: 导入org.apache.commons.io.FileUtils 导入org.springframework.web.multipart.commons.commons多部分文件 导入org.springframework.web.multipart.* 祝有需要的人好运>>>
def saveImageToFolder = {
String message = ""
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("userPhoto")
if(!f.empty) {
def usr = User.findByUsername(1)
if(!usr){
User user = new User()
user.username = params.username
user.avatarType = f.getContentType()
if(user.save()){
def userId = user.id
String username = user.username
String fileName = username + "." + f.getContentType().substring(6) // here my file type is image/jpeg
byte[] userImage = f.getBytes()
FileUtils.writeByteArrayToFile(new File( grailsApplication.config.images.location.toString() + File.separatorChar + fileName ), userImage )
message = "User Created Successfully."
}else{
message = "Can not Create User !!!"
}
}else{
message = "Username already exists. Please try another one !!!"
}
}
else {
message = 'file cannot be empty'
}
render(view: 'addUser', model:[message: message])
}
并在您的配置文件中粘贴此>>>
images.location = "web-app/images/userImages/" // after web-app/folder name/folder name and go on if you want to add other folder
我已经很容易地解决了这个问题,如下所示。您必须导入以下内容: 导入org.apache.commons.io.FileUtils 导入org.springframework.web.multipart.commons.commons多部分文件 导入org.springframework.web.multipart.* 祝有需要的人好运>>>
def saveImageToFolder = {
String message = ""
MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;
CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("userPhoto")
if(!f.empty) {
def usr = User.findByUsername(1)
if(!usr){
User user = new User()
user.username = params.username
user.avatarType = f.getContentType()
if(user.save()){
def userId = user.id
String username = user.username
String fileName = username + "." + f.getContentType().substring(6) // here my file type is image/jpeg
byte[] userImage = f.getBytes()
FileUtils.writeByteArrayToFile(new File( grailsApplication.config.images.location.toString() + File.separatorChar + fileName ), userImage )
message = "User Created Successfully."
}else{
message = "Can not Create User !!!"
}
}else{
message = "Username already exists. Please try another one !!!"
}
}
else {
message = 'file cannot be empty'
}
render(view: 'addUser', model:[message: message])
}
并在您的配置文件中粘贴此>>>
images.location = "web-app/images/userImages/" // after web-app/folder name/folder name and go on if you want to add other folder
谢谢你的帮助。但f.renameTo>>会显示此消息“无法解析符号'renameTo()”,这意味着您的请求不是MutipartRequest的实例。请参阅editI have your trument>>“如果(multipartttpServletRequest的请求实例){println(“是的,它是multipartttpServletRequest的一部分”)}”,它会打印>>“是的,它是multipartttpServletRequest的一部分”是否确实为输入文件指定了正确的名称?在上面的示例中,它被称为myfile。请检查一下,谢谢你的帮助。但f.renameTo>>会显示此消息“无法解析符号'renameTo()”,这意味着您的请求不是MutipartRequest的实例。请参阅editI have your trument>>“如果(multipartttpServletRequest的请求实例){println(“是的,它是multipartttpServletRequest的一部分”)}”,它会打印>>“是的,它是multipartttpServletRequest的一部分”是否确实为输入文件指定了正确的名称?在上面的示例中,它被称为myfile。检查pleaseit是否显示request.getFile>>无法解析符号“request.getFile”的消息不应该,但您可以尝试导入包javax.servlet.http.HttpServletRequest,您使用的是哪个grails版本?我使用的是grails 2.1.0它显示了request.getFile>>无法解析符号'request.getFile'的消息不应该,但是您可以尝试导入包javax.servlet.http.HttpServletRequest,您使用的是哪个grails版本吗?我使用的是grails 2.1.0