图片以二进制的格式保存到数据库

项目用的是 struts2+spring+hibernate+ibatis的框架

一、图片从页面到后台的保存

1、页面相关代码

前台页面用的是extjs4实现的,上传的是图片格式

    {name:'imgFile1',columnWidth:0.666,xtype:'filefield',buttonText:'浏览',regex:/^(.+)(.gif|.GIF|.png|.PNG|.jpg|.JPG)$/,
        regexText:'文件类型错误,只能上传gif,png,jpg格式的图片',
        listeners:{
            change:function(thiz){
                var name = thiz.getValue().substring(thiz.getValue().lastIndexOf("\\")+1);    //把文件名设置到对应名称的文本框上
                viewport.detailForm.getForm().findField('model.imgName1').setValue(name);
            }
        },xtype:'hidden'
    }


//然后提交是用form表单的submit方式提交的

2、hibernate中的数据类型

        <property name="img1" type="byte[]">
            <column name="IMG1" />
        </property>

3.java模型中的定义方式

    private byte[] img1;

扫描二维码关注公众号,回复: 1653488 查看本文章

    public byte[] getImg1() {
        return this.img1;
    }

    public void setImg1(byte[] img1) {
        this.img1 = img1;
    }

4.业务逻辑的编写

            private File imgFile1;

            if(imgFile1 != null){
                model.setImg1(IOUtils.toByteArray(new FileInputStream(imgFile1)));  //把图片文件转换为byte数组放入到属性中
            }

           service.saveOrUpdate(model);  //对model进行保存

以上记载的比较简略,主要的类就是IOUtils


二、从后台取图片返回到前台页面并显示

1.java中查询图片的语句

    /**
     * 查询图片
     * @throws IOException
     */
    public String queryPhoto() throws IOException{
        IBaseService service = BeanFactory.getBean("baseService");
        HashMap<String,String> params = new HashMap<String,String>();
        params.put("goodsId",goodsId);
        List<HashMap<String,Object>> modelList = service.queryListBySql("shop.querySpGoodsBaseInfoImg",params);  //此处是ibatis中的查询语句
        HttpServletResponse response = ServletActionContext.getResponse();
        OutputStream os = null;
        InputStream is = null;
        HashMap<String,Object> sbi = modelList.get(0);
        try {
            os = response.getOutputStream();
            Blob file = (Blob) sbi.get(img);
            is = file.getBinaryStream();
            int count = 0;
            byte[] buffer = new byte[1024 * 1024];
            while ((count = is.read(buffer)) != -1)
                os.write(buffer, 0, count);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (os != null)
                os.close();

            if (is != null)
                is.close();
        }
        return null;
    }

   2.ibatis中的写法

        select
            T.IMG1 "img1"
        from SP_GOODS_BASE_INFO T 

  3.前台加载图片的方法

       //加载图片的窗口

       var chartWindow = new Ext.Window({
          width:670,
          height:400,
          autoScroll:true,
          closeAction:'hide',
          layout:'fit'
      })

 

   //点击按钮,实现图片加载

   var gridMeta = [
        {
           xtype:'actioncolumn',
           text:'',
           width:30,
           items: [{
               icon: '../themes/image/default/mult_align.gif',
               tooltip: '查看图片',
               align:'center',
               handler: function(grid, rowIndex, colIndex) {
                      var record = viewport.dataJStore.getAt(rowIndex);
                      var goodsId = record.get("model.goodsId");
                      var existPhoto = false;
                      
                      chartWindow.removeAll();    
                      
                      chartWindow.setTitle(record.get("model.name"));                  
                      if(!Ext.isEmpty(record.get("model.imgName1"))){
                              existPhoto = true;
                              chartWindow.add({
                            border: false,
                            autoScroll:false,
                            frame:false,
                            flex:1,
                            html: "<img src="+CONTEXT_PATH+"/shop/queryPhotoSpGoodsBaseInfo.do?goodsId="+goodsId+"&img=img1>"
                        });
                              
                      }
                      if(!Ext.isEmpty(record.get("model.imgName2"))){
                              existPhoto = true;
                              chartWindow.add({
                            border: false,
                            autoScroll:false,
                            frame:false,
                            flex:1,
                            html: "<img src="+CONTEXT_PATH+"/shop/queryPhotoSpGoodsBaseInfo.do?goodsId="+goodsId+"&img=img2>"
                        });
                      }                  

                      if(!existPhoto){
                               chartWindow.add({
                            border: false,
                            autoScroll:false,
                            frame:false,
                            flex:1,
                            html: "无图片"
                        });
                      }
                     
                       chartWindow.doLayout();
                       chartWindow.show();
               }
           }]
      }] 


  这里指记载了主要的代码片段,可根据自己业务进行具体扩展



猜你喜欢

转载自blog.csdn.net/fefsdf/article/details/60865506