一、pom依赖(MongoDB驱动)
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.4.2</version> </dependency>
二、获取核心对象(GridFSBucket)
private final static String URL = "127.0.0.1"; private final static Integer PORT = 27017; private final static String DATABASE = "liuli";
private static MongoClient client; private static MongoDatabase db; private static GridFSBucket bucket; static{ MongoClientOptions options = MongoClientOptions.builder().build(); ServerAddress address = new ServerAddress(URL, PORT); client = new MongoClient(address, options); db = client.getDatabase(DATABASE); /*后面的名字可以自定义 * MongoDb会在数据库生成两个collections(users.chunks和users.files) * users.files存放文件信息 * users.chunks存放文件的二进制流 */ bucket = GridFSBuckets.create(db,"users"); }
三、文件上传
/** * 文件上传 */ public void fileUp(){ File png = new File("C:\\Users\\mayn\\Desktop\\1.png"); GridFSUploadOptions options = null; InputStream inputStream = null; try { inputStream = new FileInputStream(png); } catch (FileNotFoundException e) { e.printStackTrace(); } Document document = new Document(); document.put("name", "liuli"); //metadata方法可以为文件上传的同时附加一些元数据 options = new GridFSUploadOptions().chunkSizeBytes(358400).metadata(document); ObjectId id = bucket.uploadFromStream("1.png", inputStream, options); System.out.println("objectid="+id); }
四、获取文件的一些属性
/** * 查询文件属性 */ public void fileDown(){ bucket.find().forEach(new Block<GridFSFile>() { @Override public void apply(GridFSFile t) { //GridFSFile封装了所有字段 System.out.println(t.getFilename()); } }); }
在MongoDB客户端我们可以看到它的内容是这样的
五、文件下载
/** * 下载文件 * @throws FileNotFoundException */ public void fileDownLoad() throws FileNotFoundException{ bucket.downloadToStream("1.png", new FileOutputStream(new File("src\\main\\resources\\2.png"))); }
我们可以看到文件夹中有了该文件