`
chenhua_1984
  • 浏览: 1253895 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Mongodb 的GridFS

阅读更多

       假如在项目中已经采取了Mongodb,那么可以不用在重新设计文件系统了,应为MongoDb本身有的Gridfs就是一个很好的文件系统,Mongodb会利用自己的分片或者复制机制,对于文件存储和故障恢复都很容易,分配数据空间时一般是2GB为一块,不会产生磁盘碎片。

 

       Mongodb内部的基本思想是将大文件分成很多块,妹块做为一个单独的文档存储,使用files和chunks来控制。这样就可以存储大文件。

 

    Mongodb 的GridFS使用比较简单,Shell对其提供了支持,mongofiles程序提供了几个指令:put,get,list,search,delete 用来操作文件。

 

   文件存储后有以下几个字段可以读取 :_id,length,chunkSize,uploadDate,md5(可以拿来校验是否上传完整)

 

  下面是采用JAVA实现对Mongodb的GridFS的存储功能部分代码

  

package com.nbey.data.dzbl.business.impl;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.mongodb.DB;
import com.mongodb.gridfs.GridFS;
import com.nbey.data.dzbl.business.IGridfsDao;
import com.nbey.data.dzbl.dao.support.AbstractBaseMongoTemplete;
import com.nbey.data.dzbl.domain.EMRECORD;
import com.nbey.data.dzbl.domain.Gridfsfile;
import com.nbey.data.dzbl.fileio.ReadTxtContent;

import com.mongodb.gridfs.GridFSFile;

public class GridfsDao extends AbstractBaseMongoTemplete implements IGridfsDao {
	static GridFS gridFS = null;

	@Override
	public void putFile(List<File> list) {
		DB db = this.mongoTemplate.getDb();
		gridFS = new GridFS(db);
		Gridfsfile fs = null;
		String abpath = null;
		String parent = null;
		String emrText =null;
		for (File file : list) {
			fs = new Gridfsfile();
			abpath = file.getAbsolutePath();
			parent = file.getParent();
			// regex为\\\\,因为在java中\\表示一个\,而regex中\\也表示\,所以当\\\\解析成regex的时候为\\。
			// 由于unix中file.separator为斜杠"/",下面这段代码可以处理windows和unix下的所有情况:
			String temp[] = parent.replaceAll("\\\\", "/").split("/");
			if (temp.length > 1) {
				parent = temp[temp.length - 1];
			}
			fs.setFilename(parent + "$$$$" + file.getName());
			fs.setContentType(file.getName().substring(
					file.getName().lastIndexOf(".")));
			fs.setUploaded(new Date());
			saveFile(new File(abpath), fs.getFilename());
			EMRECORD emr = new EMRECORD();
			if (fs.getFilename().startsWith("M")) {
				emr.setoUTPATNO(fs.getFilename());
			} else {
				emr.setiNPATNO(fs.getFilename());
			}

			emr.setfILETYPE(fs.getFilename().substring(
					fs.getFilename().lastIndexOf(".")));
			emr.setaRCHIVED("Y");
			if (".txt".equals(fs.getFilename().substring(
					fs.getFilename().lastIndexOf(".")))) {
				emr.seteMRTEXT(ReadTxtContent.readTxtFile(abpath));
			}
			saveToEMRECORD(emr);
		}
	}

	public void saveFile(File file, String fileName) {
		try {
			GridFSFile mongofile = gridFS.createFile(file);
			mongofile.put("filename", fileName);
			mongofile.put("uploadDate", new Date());
			mongofile.put("contentType",
					fileName.substring(fileName.lastIndexOf(".")));
			mongofile.save();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void saveToEMRECORD(EMRECORD emr) {
		this.mongoTemplate.insert(emr, "emrecord");
	}

}

   

 

分享到:
评论

相关推荐

    mongodb gridfs .NET(C#) 文件存储实例

    功能:基于mongodb gridfs实现简单文件上传、下载、搜索、删除。 开发环境:VS2012 mongodb驱动:官方Driver 上传控件:jquery uploadify 疑问:sort()方法可能有点问题 PS:有问题可以留言,欢迎交流~

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    GridFS 是 MongoDB 提供的一种用于存储和检索大型文件的标准规范,它将大文件分割成多个小块(chunks)存储,方便高效管理和检索。在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件...

    基于spring-boot和mongodb gridfs文件系统的文件服务器,用于微服务架构的文件上传下载功能支撑.zip

    基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,...

    gridfs2s3:将 MongoDB GridFS 文件迁移到 AWS S3 的工具

    gridfs2s3 - 将 MongoDB GridFS 文件迁移到 AWS S3 的工具 这是一个简单的工具,它将抓取您指向的 GridFS 中的所有文件,并将它们粘贴到 S3 中 安装 go install github.com/Bowbaq/gridfs2s3 用法 gridfs2s3 -h flag...

    MongoDB GridFS.pdf

    MongoDB GridFS 是一种在 MongoDB 数据库中存储和检索大型文件(如图片、音频、视频等)的机制。由于 MongoDB 的 BSON 文档格式对单个文档的大小有限制(默认为 16MB),GridFS 提供了一种解决方案,它将大文件分割...

    PHP MongoDB GridFS 存储文件的方法详解

    MongoDB本身不支持大文件的直接存储,因此引入了GridFS作为解决方案。以下是对PHP MongoDB GridFS存储文件方法的详细解释: 1. 直接存储文件: ```php $id = $grid-&gt;storeFile("./logo.png"); ``` 在这个例子中,`...

    Mongodb的gridfs的C#的例子

    MongoDB的GridFS是一种用于存储和检索大文件的系统,它是MongoDB数据库的一部分,特别适合存储超过16MB的单个文档。在C#中,我们可以利用MongoDB .NET驱动程序来操作GridFS。以下是对GridFS在C#中使用的详细讲解。 ...

    MongoDB GridFS方式增删改图片代码

    网站大量图片存储需要用到Mongodb,本代码中以图片上传、图片更新、图片删除为例子,展示了以GridFS方式对文件进行存取。

    MongoDB-GridFS-test:从MongoDB GridFS下载文件的性能测试

    我正在尝试从GridFS读取3种不同的部署(不同的MongoDB驱动程序)。 并将结果与​​经典的Nginx配置进行比较。贡献者( ) ( )构型1,Nginx location /files/ { alias /home/ubuntu/;}测试期间, open_file_cache...

    Mongodb GridFS图片文件存储解决方案

    GridFS 是 MongoDB 提供的一种用于存储和检索大文件的标准方法,如图片、视频或大型文档。在本文中,我们将深入探讨 GridFS 图片文件存储解决方案及其工作原理。 **GridFS 概述** GridFS 是 MongoDB 的一部分,它将...

    Mongodb基于GridFS存储文件

    Mongodb基于GridFS存储文件,通过流的方式存储文件图片,以及读取功能。本人亲自测试、编写。值得信赖

    MongoDB GridFS:管理大型文件存储的高效方案

    MongoDB是一个基于文档的NoSQL数据库,由C++语言编写,旨在为大量分布式数据提供高性能、高可用性和高灵活性的数据存储解决方案。MongoDB的主要特点包括: 1. **文档导向**:MongoDB存储BSON(二进制JSON)格式的...

    mongodb+GridFS文件的上传下载删除DEMO

    GridFS 是 MongoDB 提供的一种用于存储和检索大型文件(如图片、视频等)的标准机制,将大文件分成多个小块存储在 MongoDB 的集合中,以提高效率和可靠性。 在这个"mongodb+GridFS文件的上传下载删除DEMO"项目中,...

    Mongodb与GridFS

    NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/2195646

    PHP操作MongoDB GridFS 存储文件的详解

    MongoDB GridFS是一个用于在MongoDB数据库中存储大型二进制文件的机制,它将大文件分割成多个小文件块,然后分别存储这些文件块及其元数据。在PHP中操作MongoDB GridFS存储文件需要了解如何连接MongoDB数据库、操作...

    FileUploadToMongoDBGFSandExpress:使用 Express 和 Multer 编写的 MongoDB GridFS 文件服务器示例

    文件上传到MongoDBGFS和Express 使用 Express 和 Multer 编写的 MongoDB GridFS 文件服务器示例依赖关系此示例上传文件并将它们存储在 MongoDB 的 GridFS 中。 要运行此示例,您需要在系统上安装 MongoDB。 在 OSX ...

    copy-kvs:在各种键值存储(MongoDB GridFS,PostgreSQL BLOB,Amazon S3)之间复制很多对象

    编辑配置文件gridfs-to-s3.yml以设置MongoDB GridFS / Amazon S3连接设置和其他属性。 要将文件从GridFS复制到S3 ,请运行: perl bin/copy-kvs.pl gridfs-to-s3.yml mongodb_gridfs amazon_s3 要将文件从S3复制...

    storage-gateway:适用于MongoDB GridFS的简单RESTful网关

    用于MongoDB GridFS的简单RESTful网关。 实现此网关的主要原因是过时的Nginx GridFS模块( )。 不幸的是,与编写用于访问GridFS的微服务相比,重新启动该项目似乎太困难了:) 安装 go install github....

    camel-gridfs:带有Mongodb GridFS的Apache Camel组件

    骆驼:: Mongodb GridFS 该项目是Mongodb GridFS的Camel组件。 要构建此项目,请使用 mvn install 网址格式 gridfs:connectionBean?database=databaseName&bucket=bucket&operation=operationName[&moreOptions.....

    使用java上传MP4文件至mongodb数据库,并下载 源代码

    MongoDB中的GridFS是用于存储大文件的标准,它将文件拆分为多个小块(chunks),便于高效存储和检索。GridFS分为两个集合:`files`用于存储文件元数据,`chunks`用于存储文件内容。 上传MP4文件到GridFS,首先创建...

Global site tag (gtag.js) - Google Analytics