MongoDB存储图片和读取图片

1、存储图片

// 存储文件信息
GridFS gridFS = new GridFS(MongoDBUtil.getDB(), "test");
File localFile = new File("d://test.jpg");
GridFSInputFile oneFile = gridFS.createFile(localFile);
oneFile.setFilename("test.jpg");


// 配置文件属性
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
BasicDBObject metadata = new BasicDBObject();
metadata.put("uploadDate", df.format(new Date()));
oneFile.setMetaData(metadata);	//添加属性
oneFile.save();	//保存文件

2、根据文件ID读取图片

// 存储文件信息
GridFS gridFS = new GridFS(MongoDBUtil.getDB(), "test");
// 读取文件
GridFSDBFile outFile = gridFS.findOne(new ObjectId(request.getParameter("id")));
//System.out.println(outFile);

3、根据MetaData属性查找图片

// 
GridFS gridFS = new GridFS(MongoDBUtil.getDB(), "test");
//查找条件  
BasicDBObject query = new BasicDBObject("metadata.pkid", "1123");
List<GridFSDBFile> listFiles = gridFS.find(query);
System.out.println(listFiles);
System.out.println(listFiles.size());

4、显示图片

    @RequestMapping(value = "/show")  
    public void show(HttpServletRequest request, HttpServletResponse response){
		try {
			OutputStream out = response.getOutputStream();
			response.setContentType("image/jpg");
			GridFS gridFS = new GridFS(MongoDBUtil.getDB(), "test");
			// 读取文件
			GridFSDBFile outFile = gridFS.findOne(new ObjectId(request.getParameter("id")));
			//System.out.println(outFile);
			if(outFile!=null){
				outFile.writeTo(out);
				out.flush();
				out.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

转载于:https://my.oschina.net/zhxm/blog/738467

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB可以存储图片和视频,一般使用GridFS来实现。GridFS是MongoDB的一种文件存储方式,它将大文件拆分成多个文档,每个文档可以存储一部分文件内容。GridFS使用两个集合来存储文件,一个集合存储元数据,另一个集合存储文件块。使用GridFS存储文件的步骤如下: 1. 连接MongoDB数据库,并选择一个数据库。 2. 创建GridFSBucket对象,指定文件存储的集合名称。 3. 打开要存储的文件,并将文件块写入GridFSBucket对象。 4. 关闭文件,并在元数据集合中创建一个文档,记录文件信息。 以下是一个使用GridFS存储图片的示例代码: ```python from pymongo import MongoClient from gridfs import GridFSBucket # 连接MongoDB数据库 client = MongoClient("mongodb://localhost:27017/") db = client["mydatabase"] # 创建GridFSBucket对象 bucket = GridFSBucket(db, bucket_name="images") # 打开要存储图片文件 with open("myimage.png", "rb") as f: # 将文件块写入GridFSBucket对象 file_id = bucket.upload_from_stream("myimage.png", f) # 在元数据集合中创建一个文档,记录文件信息 db.images.insert_one({ "filename": "myimage.png", "file_id": file_id }) ``` 类似地,可以使用GridFS存储视频文件。需要注意的是,由于视频文件通常很大,存储时需要将文件拆分成多个块,并逐个写入GridFSBucket对象。在读取视频文件时,也需要将多个块合并成完整的文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值