1. 程式人生 > >將byte[]陣列上傳到資料庫,從資料庫還原byte[]陣列為img圖片

將byte[]陣列上傳到資料庫,從資料庫還原byte[]陣列為img圖片

 今天碰到的需求是將圖片檔案存入資料庫,而不是儲存一個圖片訪問的URL,不知道有沒有人遇到跟我一樣的需求,查詢過javaAPI後使用ByteArrayOutputStream 和ByteArrayInputStream實現了該功能,測試程式碼如下:

 目標檔案為D://11.png

 

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

 

存放成功後的資料庫為:

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

 最後結果如下:

記錄完畢