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

    xiaoxiao2021-03-26  12

    项目用的是 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;

        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();                }            }]       }] 

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

    转载请注明原文地址: https://ju.6miu.com/read-600283.html

    最新回复(0)