300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql以blob存储图片文件的存储和读取问题解决

mysql以blob存储图片文件的存储和读取问题解决

时间:2023-05-31 12:45:16

相关推荐

mysql以blob存储图片文件的存储和读取问题解决

BLOB存储图片格式问题

因为项目需要存储网络上用户头像的信息,前面的文章也说过存储的方法,后来为了锻炼自己,就选择了以blob形式存储图片,而非图片路径。之前因为做的是一个网站的图像采集,存入数据库后,发现有一小部分出现了图片显示成不全,模糊等症状,如图:。

因为所占部分比较少,只有2%左右,还处于可以接受的水平,而且当时为了开发功能,也就没有进行细致的研究。但结果就是针对另一个网站进行图像存取的时候,unbelievable事情发生了,截个图让大家见识一下:

这貌似就是shit,根本不符合开发的要求,当初还以为是另一个同志的读取数据库方法上有问题,要不怎么可能差距这么大。

仔细想了想,自己进行了测试,首先提取图片链接,使用inputstream和outputstream流结合fileoutputstream存取,发现所得图片全为正常,这说明,在获取的inputstream字节流是木有问题的。随后将字节流存入数据库的blob类型中,然后用同样的outputstream流,fileoutputstream接受保存本地图片,结果就成现在这个样子了。

就此,问题出现了,字节流写入数据库blob出现了问题。鉴于此问题的严重性,自己在网上寻找解决字节流写入数据库的其他方案,有byte[]数组方式,转化为String方式,ByteArrayStream字节流方式。但,因为个人实力有限,虽然找到了这些写入的方式,有的在inputstream转化byte[] 上出问题,有的不支持HttpStream流到byteArraySteam流的转化,String流还要更改数据库设计等问题,方法没有实现。

几次尝试的失败,于是动脑筋想了想有没有其它的解决方式呢,最后脑门一热,想到了既然httpStream流直接转化为inputstream是正常的,而转化为其它流文件则是问题,而inputstream字节流直接保存图片也没有问题,那为何不来个中转的方式,先将图片httpStream流变为变为相应文件暂存,稍后再用fileinputstream流取出,然后再写入数据库。

URL myurl = new URL(imageUrl); URLConnection myconn = myurl.openConnection(); in = myconn.getInputStream(); //先写入到文件OutputStream myos = null; try { myos = (new FileOutputStream("[暂存]"+".jpg")); byte[] buff = new byte[1024]; int num = 0; while((num = in.read(buff))!= -1) { myos.write(buff, 0, num); myos.flush(); }inputstream newin = new FileInputStream("[暂存].jpg");}

经过上面的折腾,猛然发现,问题解决了,虽然最终为何会出现图片进入数据库后显示出现问题还没有找到答案,但目前的问题算是解决了,下面是显示正常的截图。



本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。