个人在项目中遇到需要往mongo里保存图片和文件,整体做下来写个随笔,也算是个总结。
是一种非关系型(NoSql),很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
一般mongo建库的时候自带有files(文件),mail(邮件).....等库,这里我做的时候就把图片直接保存到了wechat_cc3下的GridFS下的HeadImage下。
1 import com.jfinal.kit.PropKit; 2 import com.mongodb.DB; 3 import com.mongodb.MongoClient; 4 import com.mongodb.gridfs.GridFS; 5 import com.mongodb.gridfs.GridFSDBFile; 6 import com.mongodb.gridfs.GridFSInputFile; 7 8 import java.io.*; 9 import java.net.URL;10 import java.net.URLConnection;11 import java.net.UnknownHostException;12 13 public class imageUtil {14 15 public static String getImageByUrl(String imageurl, String openId){16 GridFSInputFile gridFSInputFile;17 GridFS myFS = null;18 MongoClient mongoClient = null;19 try {20 mongoClient = MongoConnUtil.getConn();21 DB db = mongoClient.getDB(PropKit.get("mongodb.db","ztct_cc3"));22 myFS = new GridFS(db,"HeadImage");23 // 构造URL24 URL url = new URL(imageurl);25 // 打开连接26 URLConnection con = url.openConnection();27 // 输入流28 InputStream is = con.getInputStream(); // 这里需要先删除已存在文件,如果已存在会默认保存不进去29 myFS.remove(openId);30 GridFSDBFile gridFSDBFile = myFS.findOne(openId);31 gridFSInputFile = myFS.createFile(is);32 gridFSInputFile.put("_id", openId);33 gridFSInputFile.setFilename(openId);34 gridFSInputFile.setContentType("jpg");35 gridFSInputFile.save();36 is.close();37 return "success";38 } catch (Exception e) {39 return "error";40 }41 }42 43 }
主要在这两步
拿到照片流 InputStream is = con.getInputStream();
存进库里 gridFSInputFile = myFS.createFile(is);
import com.jfinal.kit.PropKit;import com.mongodb.MongoClient;import java.net.UnknownHostException;public class MongoConnUtil { private static MongoClient mongoClient = null; public static MongoClient getConn() throws UnknownHostException { if(mongoClient == null){ intializeMongoClient(); } return mongoClient; } private static void intializeMongoClient() throws UnknownHostException { String host = PropKit.get("mongodb.ip", "127.0.0.1"); int port = PropKit.getInt("mongodb.port",27017); mongoClient = new MongoClient( host , port ); } public static synchronized void closeConnection(){ if(mongoClient != null){ mongoClient.close(); } }}
我这里得到的图片是一个url,所以直接读取url把流存进mongo里。如果需要存本地的图片改下获取图片的代码,其他一样就行。
【施主,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。非常感谢!】