MongoDB 存储图片

不同于MongoDB 2.0提供的“GridFS”方式,MongoDB 3.0的图片保存和读取困扰了我一段时间。MongoDB本身是可以存储二进制的,这意味着其存储图片是完全可以的。虽说图片可以保存到本地,数据库只记录相对路径,但是某些时候还是有那么一丝不方便。

最近修改的一个门户网站,因为要更换数据库,所以难免涉及到数据转换,这个数据转换为我提供了MongoDB 3.0保存图片的思路。之前门户网站使用的是SQLite数据库保存头像等小图片,存储类型是Blob,但是MongoDB是没有Blob这个类型的的。所以只能选择Binary来存储。通过一个小的c#程序,将SQLite数据库的数据转MongoDB中,其中图片存储转换的代码为: user_Image = (byte[])re["User_Head"](user_Image是BsonBinaryData类型)。

转换完成后,打开MongoBooster查看了一下,发现user_Image是以Base64编码存储从SQLite转过来的Blob类型的数据。MongoDB 存储图片_第1张图片这样我们在用MongoDB 3.0存储图片的时候就可以选择Base64编码来存储。只需要在上传图片时将图片转为Base64编码即可。 要将MongoDB的存放的Base64编码的图片在网页上显示,也需要经过一系列转换,因为MongoDB并没有提供getBinary方法,我通过一个比较绕的方法(我想大神们应该有更好的办法,希望得到提示,谢谢)。首先将代码获取到的整个document转为json,MongoDB提供了toJson()方法,然后取出user_Image这个field的值转为String,同时通过"分为多个数组,其中数组的第4部分就是MongoDB中图片以Base64编码存储的值。具体代码为:

String js = doc.toJson();

JSONObject jso = JSONObject.fromObject(js);

String[] strs = jso.get("Icon_Image").toString().split("\"");

至于在网页上的显示,则直接通过img标签,因为img标签有识别base64的方法

如上MongoDB的图片存储于显示就实现了。方法比较蠢笨,希望得到熟悉MongoDB的朋友能指导一下,给出更好的方法。

你可能感兴趣的:(mongodb,数据库,存储,图片,数据库)