mongo数据库存图片,邮件

      个人在项目中遇到需要往mongo里保存图片和文件,整体做下来写个随笔,也算是个总结。

      MongoDB是一种非关系型数据库(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             // 构造URL
24             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里。如果需要存本地的图片改下获取图片的代码,其他一样就行。

     【施主,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。非常感谢!】

      

posted @ 2017-03-13 17:25  noddlesli  阅读(850)  评论(0编辑  收藏  举报