如何将blob类型数据的图片数据从数据库中读取出来,并保存到本地呢?
代码如下:
定义一个实体类:
public class IdeaImgOutVo { private byte[] photo;//图片 private String plNO;//手册编码 private String pictureName;//图片名字 public byte[] getPhoto() { return photo; } public void setPhoto(byte[] photo) { this.photo = photo; } public String getPlNO() { return plNO; } public void setPlNO(String plNO) { this.plNO = plNO; } public String getPictureName() { return pictureName; } public void setPictureName(String pictureName) { this.pictureName = pictureName; } }
sql文件:
<select id="outImg" resultMap="imgVos"> SELECT e.PICTUREDATA as piture, d.PLNO, b.BLOCKCODE from ET_PICTURE e left join ET_BLOCK b on e.BLOCKID = b.BLOCKID join ET_PBLOCK c on c.BLOCKID = b.BLOCKID join EM_PRODUCT d on d.PRODUCTID = c.PRODUCTID WHERE e.BLOCKID = '105' </select>
service:
@Service public class IdeaImgOutServiceImpl implements IdeaImgOutService { @Autowired private IdeaImgOutDao ideaImgOutDao; @Override public List<IdeaImgOutVo> outImg() { return ideaImgOutDao.outImg(); } public R outImgsMain(){ try { List<IdeaImgOutVo> vos = ideaImgOutDao.outImg(); for (IdeaImgOutVo v: vos) { byte[] imgs = v.getPhoto(); File file = new File("e:\\picture\\"+v.getPlNO()+"\\IMGE"); if (!file.exists()){ file.mkdirs(); } FileImageOutputStream outputStream = new FileImageOutputStream(new File("e:\\picture\\"+v.getPlNO()+"\\IMGE"+"\\"+v.getPictureName()+".jpg")); outputStream.write(imgs,0,imgs.length); outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } return R.ok("图片保存完成"); } }
Controller:
@Controller @RequestMapping(API_PATH+API_VERSION+IMG) @Api(description = "导出图片并保存") public class IdeaImgOutController { public static final String IMG = "img"; @Autowired private IdeaImgOutServiceImpl ideaImgOutService; @RequestMapping(value = "out") @ResponseBody public R outImg() { ideaImgOutService.outImgsMain(); return R.ok("图片保存完成!"); } }
dao、serivce接口此处就不写了,没有啥内容,以上思路就是 定义一个 byte【】数组类型的变量,以此接收blob类型的二进制数据,然后使用 FileImageOutputStream 图片输出流 将数据保存到本地。。