将byte[]数组上传到数据库,从数据库还原byte[]数组为img图片

 今天碰到的需求是将图片文件存入数据库,而不是存储一个图片访问的URL,不知道有没有人遇到跟我一样的需求,查询过javaAPI后使用ByteArrayOutputStream 和ByteArrayInputStream实现了该功能,测试代码如下:

 目标文件为D://11.png

将byte[]数组上传到数据库,从数据库还原byte[]数组为img图片_第1张图片 

   1.将本地图片转换为byte数组,并存放数据库

@Test
    public void insertUser() {
        //获取sqlsession(MySqlsessionFactory为我自己配置的工厂类)
        SqlSession sqlSession = MySqlSessionFactory.getSqlSession();
        try {
            //断言sqlSession非空
            assert sqlSession != null;
            //获取userMapper映射对象
            SysUserMapper userMapper = sqlSession.getMapper(SysUserMapper.class);
            SysUser sysUser = new SysUser();
            //创建文件输入流
            FileInputStream fis = new FileInputStream("d://11.png");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            BufferedImage read = ImageIO.read(fis);
            ImageIO.write(read, "png", baos);
            //将目标文件转换成byte数组
            byte[] bytes = baos.toByteArray();
            //设置pojo属性
            sysUser.setHeadImg(bytes);
            sysUser.setUserInfo("测试-带图片");
            sysUser.setEmail("[email protected]");
            sysUser.setCreateTime(new Date());
            sysUser.setPassword("1111111");
            sysUser.setUserName("测试用户");
            //添加进数据库
            userMapper.insertUser(sysUser);
            //提交
            sqlSession.commit();
            fis.close();
            baos.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            assert sqlSession != null;
            sqlSession.close();

        }
    }

 

存放成功后的数据库为:

将byte[]数组上传到数据库,从数据库还原byte[]数组为img图片_第2张图片

 2.将数据库中head_img文件读取并保存到C://22.png

 @Test
    public void testDownLoadImgFromDataBase() {
        //获取session会话
        SqlSession sqlSession = MySqlSessionFactory.getSqlSession();
        try {
            //断言非空
            assert sqlSession != null;
            //获取映射对象
            SysUserMapper userMapper = sqlSession.getMapper(SysUserMapper.class);
            //按id查询用户信息
            SysUser sysUser = userMapper.findUserById(1004L);
            //读取从数据库查到的用户头像
            ByteArrayInputStream bais = new ByteArrayInputStream(sysUser.getHeadImg());
            BufferedImage read = ImageIO.read(bais);
            //写出数据到C://22.png
            ImageIO.write(read, "png", new FileOutputStream(new File("C://22.png")));
            bais.close();


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            assert sqlSession != null;
            sqlSession.close();
        }
    }

 最后结果如下:

将byte[]数组上传到数据库,从数据库还原byte[]数组为img图片_第3张图片

记录完毕

你可能感兴趣的:(学习日记,备忘录,知识记录)