🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Java MongoDB:使用 GridFS API 获取/保存图像 > 原文: [https://howtodoinjava.com/mongodb/java-mongodb-getsave-image-using-gridfs-apis/](https://howtodoinjava.com/mongodb/java-mongodb-getsave-image-using-gridfs-apis/) 在先前的教程中,我们了解了 [MongoDB 基础知识](//howtodoinjava.com/nosql/introduction-to-mongodb-why-mongodb/ "Introduction to MongoDB: Why MongoDB?")和[在 Windows](//howtodoinjava.com/nosql/mongodb/how-to-install-mongodb-on-windows/ "How to Install MongoDB on Windows") 中安装 MongoDB 的知识,以及有关[在 MongoDB 中插入文档](//howtodoinjava.com/nosql/mongodb/java-mongodb-insert-documents-in-collection-examples/ "Java MongoDB : Insert Document(s) in Collection Examples")和[从 MongoDB 选择文档](//howtodoinjava.com/nosql/mongodb/mongodb-selectqueryfind-documents-examples/ "MongoDB : Select/Query/Find Document(s) Examples")的知识。 在本教程中,我仅提供一些代码示例,这些代码示例将在您必须使用图像或其他二进制数据类型来从 MongoDB 存储/检索/删除此类数据时提供帮助。 对于 CRUD 操作,我们将使用 **MongoDB 的 GridFS API** 。 在理想情况下,GridFS 是**规范,用于存储和检索超出 BSON 文档大小限制 16MB 的文件**。 而不是将文件存储在单个文档中, **GridFS 将文件划分为多个部分或大块,并将这些大块中的每个存储为单独的文档**。 默认情况下,GridFS 将块大小限制为 255k。 GridFS 使用两个集合来存储文件。 一个集合存储文件块,另一个集合存储文件元数据。 当您查询 GridFS 存储中的文件时,驱动或客户端将根据需要重新组装块。 **您可以对通过 GridFS** 存储的文件执行范围查询。 您还可以从文件的任意部分访问信息,从而可以“跳入”视频或音频文件的中间。 GridFS 不仅可用于存储超过 16MB 的文件,而且还可用于存储要访问**的任何文件,而不必将整个文件加载到内存**中。 ```java Code Examples List Save an image into MongoDB Get/Retrieve an image from MongoDB Get/Retrieve all images from MongoDB Save the retrieved image into local file-system Delete an image from MongoDB ``` 为了进行测试,我将图像存储在名为`DemoImage.png`的临时位置(`c:`驱动器)中。 我将此图像存储到 MongoDB 中。 ## 将图像保存到 MongoDB ```java private static void saveImageIntoMongoDB(DB db) throws IOException { String dbFileName = "DemoImage"; File imageFile = new File("c:\\DemoImage.png"); GridFS gfsPhoto = new GridFS(db, "photo"); GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile); gfsFile.setFilename(dbFileName); gfsFile.save(); } ``` ## 从 MongoDB 获取/检索图像 ```java private static void getSingleImageExample(DB db) { String newFileName = "c:/DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName); System.out.println(imageForOutput); } Output: { "_id" : { "$oid" : "53cff8d736414e8af4a4f0b8"} , "chunkSize" : 262144 , "length" : 138855 , "md5" : "b75f77c16c3ac6472365c06cde15d0da" , "filename" : "DemoImage" , "contentType" : null , "uploadDate" : { "$date" : "2014-07-23T18:03:03.403Z"} , "aliases" : null } ``` ## 从 MongoDB 获取/检索所有图像 ```java private static void listAllImages(DB db) { GridFS gfsPhoto = new GridFS(db, "photo"); DBCursor cursor = gfsPhoto.getFileList(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } Output: { "_id" : { "$oid" : "53cff8d736414e8af4a4f0b8"} , "chunkSize" : 262144 , "length" : 138855 , "md5" : "b75f77c16c3ac6472365c06cde15d0da" , "filename" : "DemoImage" , "contentType" : null , "uploadDate" : { "$date" : "2014-07-23T18:03:03.403Z"} , "aliases" : null } ``` ## 将检索到的图像保存到本地文件系统中 ```java private static void saveToFileSystem(DB db) throws IOException { String dbFileName = "DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); GridFSDBFile imageForOutput = gfsPhoto.findOne(dbFileName); imageForOutput.writeTo("c:/DemoImageNew.png"); } ``` ## 从 MongoDB 删除图像 ```java private static void deleteImageFromMongoDB(DB db) { String dbFileName = "DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); gfsPhoto.remove(gfsPhoto.findOne(dbFileName)); } ``` ## 完整的示例代码 以下是构建以上简短示例的完整信息。 随意玩。 ```java package examples.mongodb.crud; import java.io.File; import java.io.IOException; import com.mongodb.DB; import com.mongodb.DBCursor; import com.mongodb.MongoClient; import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSDBFile; import com.mongodb.gridfs.GridFSInputFile; public class MongoDBBinaryExample { public static void main(String[] args) throws IOException { MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("howtodoinjava"); //Save a image in DB saveImageIntoMongoDB(db); //Get a image from DB getSingleImageExample(db); //Get all images from DB listAllImages(db); saveToFileSystem(db); //Delete images from DB deleteImageFromMongoDB(db); //Verifying if image was deleted or not getSingleImageExample(db); } private static void saveImageIntoMongoDB(DB db) throws IOException { String dbFileName = "DemoImage"; File imageFile = new File("c:\\DemoImage.png"); GridFS gfsPhoto = new GridFS(db, "photo"); GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile); gfsFile.setFilename(dbFileName); gfsFile.save(); } private static void getSingleImageExample(DB db) { String newFileName = "c:/DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName); System.out.println(imageForOutput); } private static void listAllImages(DB db) { GridFS gfsPhoto = new GridFS(db, "photo"); DBCursor cursor = gfsPhoto.getFileList(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } private static void saveToFileSystem(DB db) throws IOException { String dbFileName = "DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); GridFSDBFile imageForOutput = gfsPhoto.findOne(dbFileName); imageForOutput.writeTo("c:/DemoImageNew.png"); } private static void deleteImageFromMongoDB(DB db) { String dbFileName = "DemoImage"; GridFS gfsPhoto = new GridFS(db, "photo"); gfsPhoto.remove(gfsPhoto.findOne(dbFileName)); } } Output: { "_id" : { "$oid" : "53cff8d736414e8af4a4f0b8"} , "chunkSize" : 262144 , "length" : 138855 , "md5" : "b75f77c16c3ac6472365c06cde15d0da" , "filename" : "DemoImage" , "contentType" : null , "uploadDate" : { "$date" : "2014-07-23T18:03:03.403Z"} , "aliases" : null } { "_id" : { "$oid" : "53cff8d736414e8af4a4f0b8"} , "chunkSize" : 262144 , "length" : 138855 , "md5" : "b75f77c16c3ac6472365c06cde15d0da" , "filename" : "DemoImage" , "contentType" : null , "uploadDate" : { "$date" : "2014-07-23T18:03:03.403Z"} , "aliases" : null } null ``` 这就是本简单教程的全部内容。 希望它能帮助有需要的人。 **祝您学习愉快!** **参考**:[http://docs.mongodb.org/manual/core/gridfs/](http://docs.mongodb.org/manual/core/gridfs/ "gridfs")