grails学习笔记-文件上传

来源:互联网 发布:网络存储服务器 编辑:程序博客网 时间:2024/04/30 02:28

第一次发表文章,多多包含,最近开始学习grails这个框架,希望能把自己学习的点点滴滴记录下来,和大家一起探讨。grails这个框架就不多说了,有机会和大家再一起探讨,今天研究了一下如何在grails中实现文件上传和下载,其实实现起来同java差不多,下面以图片上传为例。

在控制器中有两种处理文件上传的办法,如果想在领域类中保存图像,最好的选择的使用命令对象,如果是上传到文件系统,则需要访问原始的图片路径返回到上传过程的Spring MultipartHttpServletRequest对象,MultipartHttpServletRequest类有一个transferTo()方法可以将图像数据直接搬到文件中。下面上代码,无图无真相。

index.gsp:

<form action="${createLink(action: 'upload')}" method="post" enctype="multipart/form-data">             <input type="file" name="savedFileName">             <input type="submit" value="上传">         </form>
当然你也可以用<g:uploadForm>标签,它会告诉浏览器包含文件上传,不需要特意指定enctype,接下来看看upload是如何执行的
 def upload={         def f=request.getFile("savedFileName")        def fileName=f.originalFilename        def savedFileName="a"+"${fileName[fileName.lastIndexOf('.')..-1]}"        def path=servletContext.getRealPath("upload")+"/"+savedFileName        if (!f.empty){            f.transferTo(new File(path))        }else{            flash.message="file can not be empty!"        }        redirect(action: "index")    }
为了接下来能显示图片,所以我把图片名字固定为a.jpg,到这里一个简单的图片上传就完成了,是不是很简单,接下来看看图片的获取显示,其实,这个过程和java的基本一致
<img src="${createLink(action:'showImg' )}">
这是页面用来获取图片的标签,接下来是执行显示的方法
def showImg={        def file=new File(servletContext.getRealPath("upload")+"/a.jpg")        def fis,buff,out        if (file.exists()){            fis=new FileInputStream(file)            buff=new BufferedInputStream(fis)            out=response.getOutputStream()            byte[] b=new byte [1024]            int i=0            while((i = buff.read(b))!=-1){                out.write(b,0,i)            }        }    }
别忘了关闭输入、输出流,我就不写了,怎么样是不是很简单,如果有问题希望大家指正,如果大家有好的意见欢迎交流,谢谢


原创粉丝点击