將byte[]陣列上傳到資料庫,從資料庫還原byte[]陣列為img圖片
阿新 • • 發佈:2018-12-20
今天碰到的需求是將圖片檔案存入資料庫,而不是儲存一個圖片訪問的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(); } }
最後結果如下:
記錄完畢