代码改变世界

Grails 项目中处理图片上传,下面是单个的文件上传 Example

2014-04-13 18:34  低调的小码农  阅读(1497)  评论(0编辑  收藏  举报
  1. 前台页面上传图片的的GSP页面:
  2. <g:form action="save"  method="post" enctype="multipart/form-data">//上传文件需要把form表单的enctype 属性设置为multipart/form-data
  3.    <div> <input type="file" id
  4. 前台页面上传图片的的GSP页面:
  5. <g:form action="save"  method="post" enctype="multipart/form-data">//上传文件需要把form表单的enctype 属性设置为multipart/form-data
  6.    <div> <input type="file" id="projectLogoPath" name="projectLogoPath"value="${fieldValue(bean:projectInstance,field:'projectLogoPath')}" />//上传图片的表单控件
  7. </div>          <fieldset class="buttons">
  8.                 <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
  9. </fieldset>
  10. </g:form>
  11. ="projectLogoPath" name="projectLogoPath"value="${fieldValue(bean:projectInstance,field:'projectLogoPath')}" />//上传图片的表单控件
  12. </div>          <fieldset class="buttons">
  13.                 <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
  14. </fieldset>
  15. </g:form>
  • Cottroller 中的方法:
  • def uploadImage(){//上傳圖片到本地文件夾中
  •        def fileName
  •        def filePath
  • def f = request.getFile('projectLogoPath')//获取前台页面表单控//中的文件名称
  •        if(!f.empty) {
  •            Date  d=new Date();
  •            String dateString=  d.format("yyyy-mm-dd-hh-ss")
  •            String  fileProName=f.getOriginalFilename()
  • String extension = fileProName.split('\\.')[-1]//截取获取文
  • //件名的后缀
  •            fileName=dateString+"."+extension
  •            filePath="web-app/images/"
  •            f.transferTo(new File(filePath+fileName))
  •        }
  •        return  filename    //返回文件名称
  •     }

 

  1. Product domain类中存储的是图片的相对路径:
  2. def save() {
  3.        User user=SpringSecurityService.currentUser//获取当前用户名
  4.        def productInstance = new Product(params)
  5.        productInstance.state=0;
  6. String pictureUrl=uploadImage()//调用上传图片的方法,返回一个储//存图片的路径。
  7.        productInstance.pictureUrl=pictureUrl//存储图片路径
  8.        if (!productInstance.save(flush: true)) {
  9.            render(view: "create", model: [productInstance: productInstance])
  10.            return
  11.        }

 

  1.        ProductSet p=new ProductSet()//在用户保存商品信息的时候将用户和商品关联起来
  2.        p.user=user
  3.        p.product=productInstance
  4.        p.save();
  5.        flash.message = message(code: 'default.created.message', args: [
  6.            message(code: 'product.label', default: 'Product'),
  7.            productInstance.id
  8.        ])
  9.        redirect(action: "list", id: productInstance.id)
  10.     }

 

  • 前台页面显示显示图片方式:
  • <img
  • src="<%=request.getContextPath()%>/images/${productInstance.pictureUrl}" alt="Grails" style="height:100px;width: 150px;"/>