• 安装nginx和nginx-gridfs和mongodb


    1.安装依赖包:

    [root@mongo_rs1 ~]# yum -y install pcre-devel openssl-devel zlib-devel git gcc gcc-c++
    
    [root@mongo_rs1 zhuyr]# git clone https://github.com/mdirolf/nginx-gridfs.git
    [root@mongo_rs1 zhuyr]# cd nginx-gridfs/
    [root@mongo_rs1 nginx-gridfs]# git checkout v0.8
    [root@mongo_rs1 nginx-gridfs]# git branch
    [root@mongo_rs1 nginx-gridfs]# git submodule init
    #子模组 'mongo-c-driver' (git://github.com/mongodb/mongo-c-driver.git) 已为路径 'mongo-c-driver' 注册
    [root@mongo_rs1 nginx-gridfs]# git submodule update
    正克隆到 'mongo-c-driver'...
    remote: Counting objects: 101193, done.
    remote: Compressing objects: 100% (128/128), done.
    remote: Total 101193 (delta 159), reused 195 (delta 127), pack-reused 100938
    接收对象中: 100% (101193/101193), 49.45 MiB | 4.55 MiB/s, done.
    处理 delta 中: 100% (88309/88309), done.
    子模组路径 'mongo-c-driver':检出 '74cc0b8005fbbc84ec4a0003ff80c68f9e9cc7de'
    

    2.安装nginx

    [root@mongo_rs1 zhuyr]#  wget http://nginx.org/download/nginx-1.7.9.tar.gz
    [root@mongo_rs1 zhuyr]# tar -zxvf nginx-1.7.9.tar.gz
    [root@mongo_rs1 zhuyr]# cd nginx-1.7.9/
    [root@mongo_rs1 nginx-1.7.9]# ./configure --prefix=/usr/local/nginx   --with-openssl=/usr/include/openssl --add-module=/zhuyr/nginx-gridfs
    [root@mongo_rs1 nginx-1.7.9]# make -j8 && make install -j8
    

      

    #如果报错
    [root@mongo_rs1 nginx-1.7.9]# ./configure --prefix=/usr/local/nginx   --with-openssl=/usr/include/openssl --add-module=/zhuyr/nginx-gridfs
    #把第3行的-Werror错误去掉
    [root@mongo_rs1 nginx-1.7.9]# vi objs/Makefile 
    [root@mongo_rs1 nginx-1.7.9]# make && make install
    

    3.修改配置文件

    [root@mongo_rs1 nginx-1.7.9]# vi /usr/local/nginx/conf/nginx.conf
    #添加以下内容
    
            location /girdfstest/ {
                gridfs pics
                field=filename
                type=string;
                mongo 127.0.0.1:27017;
            }
            location /girdfsjava/ {
                gridfs pics
                field=_id
                type=objectid;
                mongo 127.0.0.1:27017;
            }
    #gridfstest:访问地址
    #field=filename   http://172.16.160.91/girdfstest/后面填写什么?
    #type=string;     字符窜
    #field=_id
    #type=objectid;
    #pics:数据库
    
    #mongo 127.0.0.1:10001  #mongo的服务器地址及端口
    #启动nginx
    [root@mongo_rs1 nginx-1.7.9]# /usr/local/nginx/sbin/nginx
    #配置修改后重新加载
    [root@mongo_rs1 nginx-1.7.9]# /usr/local/nginx/sbin/nginx -s reload
    

      

    4.安装mongodb

    vi /etc/yum.repos.d/mongodb-org-3.4.repo  
    [mongodb-org-3.4]  
    name=MongoDB Repository  
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/  
    gpgcheck=0  
    enabled=1  
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc  
    $ yum -y install mongodb-org 
    查看修改配置文件 : vim /etc/mongod.conf
    mongodb的配置文件中的bind_ip 默认为127.0.0.1,默认只有本机可以连接。  此时,需要将bind_ip配置为0.0.0.0,表示接受任何IP的连接。 启动mongodb :systemctl start mongod.service 停止mongodb :systemctl stop mongod.service

    如果报错:

    [root@ansible nginx-1.7.9]# journalctl -xe
    7月 11 10:54:03 ansible.test yum[797]: Erased: mongodb-org-3.2.20-1.el7.x86_64
    7月 11 10:54:04 ansible.test systemd[1]: Reloading.
    7月 11 10:54:04 ansible.test systemd[1]: Configuration file /usr/lib/systemd/system/ebtables.service is marked executable. Ple
    7月 11 10:54:04 ansible.test systemd[1]: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executabl
    7月 11 10:54:04 ansible.test yum[797]: Erased: mongodb-org-server-3.2.20-1.el7.x86_64
    7月 11 10:54:04 ansible.test yum[797]: Erased: mongodb-org-shell-3.2.20-1.el7.x86_64
    7月 11 10:54:04 ansible.test yum[797]: Erased: mongodb-org-mongos-3.2.20-1.el7.x86_64
    7月 11 10:54:04 ansible.test yum[797]: Erased: mongodb-org-tools-3.2.20-1.el7.x86_64
    7月 11 10:59:08 ansible.test systemd[1]: Reloading.
    7月 11 10:59:08 ansible.test systemd[1]: Configuration file /usr/lib/systemd/system/ebtables.service is marked executable. Ple
    7月 11 10:59:08 ansible.test systemd[1]: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executabl
    7月 11 10:59:08 ansible.test yum[928]: Installed: mongodb-org-server-3.2.20-1.el7.x86_64
    7月 11 10:59:08 ansible.test yum[928]: Installed: mongodb-org-mongos-3.2.20-1.el7.x86_64
    7月 11 10:59:12 ansible.test yum[928]: Installed: mongodb-org-tools-3.2.20-1.el7.x86_64
    7月 11 10:59:13 ansible.test yum[928]: Installed: mongodb-org-shell-3.2.20-1.el7.x86_64
    7月 11 10:59:13 ansible.test yum[928]: Installed: mongodb-org-3.2.20-1.el7.x86_64
    7月 11 10:59:21 ansible.test polkitd[747]: Registered Authentication Agent for unix-process:961:41855579 (system bus name :1.1
    7月 11 10:59:21 ansible.test systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
    -- Subject: Unit mongod.service has begun start-up
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit mongod.service has begun starting up.
    7月 11 10:59:21 ansible.test mongod[966]: Error starting mongod. /var/run/mongodb/mongod.pid exists.
    7月 11 10:59:21 ansible.test systemd[1]: mongod.service: control process exited, code=exited status=1
    7月 11 10:59:21 ansible.test systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
    
    #解决方法: [root@ansible mongodb]# rm /var/run/mongodb/mongod.pid -f [root@ansible mongodb]# systemctl start mongod.service

    5.使用mongofiles工具

    [root@mongo_rs1 tmp]# mongofiles  put 1.JPG -d pics -t jpg 
    2018-07-11T11:34:16.002+0800    connected to: localhost
    added file: 1.JPG
    [root@mongo_rs1 tmp]# mongofiles list -d pics
    2018-07-11T11:34:33.037+0800    connected to: localhost
    1.JPG   138424
    [root@mongo_rs1 tmp]# mongofiles -d pics get 1.JPG
    2018-07-11T13:39:50.775+0800 connected to: localhost
    finished writing to 1.JPG
    

      

    6.http访问:

    http://172.16.160.91/girdfstest/1.JPG

    7.使用java开发:

    package com.neo;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.UUID;
    
    import org.bson.types.ObjectId;
    import org.junit.Test;
    
    import com.mongodb.MongoClient;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.gridfs.GridFSBucket;
    import com.mongodb.client.gridfs.GridFSBuckets;
    import com.mongodb.client.gridfs.GridFSFindIterable;
    import com.mongodb.client.gridfs.model.GridFSFile;
    import com.mongodb.client.model.Filters;
    
    public class TestMongo {
    
    	String mongoHost = "172.16.160.91";
    	int mongoPort = 27017;
    	String dbName = "pics";
    
    	public MongoDatabase mongoDatabase() throws Exception {
    		MongoClient mongoClient = new MongoClient(mongoHost, mongoPort);
    		return mongoClient.getDatabase(dbName);
    	}
    
    	// 上传文件
    	@Test
    	public void upload() throws Exception {
    		// 获取文件流
    		File file = new File("C:\tmp\10.jpg"); // 提前放一个图片
    		InputStream in = new FileInputStream(file);
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 上传
    		ObjectId fileId = bucket.uploadFromStream(UUID.randomUUID().toString(), in);
    		System.out.println("上传完成。 文件ID:" + fileId);
    	}
    
    	/*
    	 * [root@mongo_rs1 tmp]# mongofiles list -d pics 
    	 * 2018-07-11T15:05:38.944+0800 connected to: localhost 
    	 * f32a465b-6372-400d-b9e9-a10664e2d9a0 6644
    	 * http://172.16.160.91/girdfsjava/5b45b34281dab5d81cca03cb
    	 */
    	
    	// 查找文件
    	@Test
    	public void findOne() throws Exception {
    		// 获取文件ID
    		String objectId = "5b45acdc81dab5fb9039ae3d"; // 根据upload后文件ID修改
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 获取内容
    		GridFSFindIterable gridFSFindIterable = bucket.find(Filters.eq("_id", new ObjectId(objectId)));
    		GridFSFile gridFSFile = gridFSFindIterable.first();
    		System.out.println("filename: " + gridFSFile.getFilename());
    	}
    	
    	// 下载文件
    	@Test
    	public void download() throws Exception {
    		// 获取文件ID
    		String objectId = "5b45acdc81dab5fb9039ae3d";
    		// 获取文件流,定义存放位置和名称
    		File file = new File("C:\tmp\down\5b45acdc81dab5fb9039ae3d.jpg");
    		
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 创建输出流
    		OutputStream os = new FileOutputStream(file);
    		// 下载
    		bucket.downloadToStream(new ObjectId(objectId), os);
    		System.out.println("下载完成。");
    	}		
    	
    	// 删除文件
    	@Test
    	public void delete() throws Exception {
    		// 获取文件ID
    		String objectId = "5b45acdc81dab5fb9039ae3d";
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 删除
    		bucket.delete(new ObjectId(objectId));
    		System.out.println("删除完成。");
    	}	
    	
    	// 上传文件
    	@Test
    	public void upload2() throws Exception {
    		// 获取文件流
    		File file = new File("C:\tmp\10.jpg"); // 提前放一个图片
    		InputStream in = new FileInputStream(file);
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 上传
    		ObjectId fileId = bucket.uploadFromStream("10.jpg", in);
    		System.out.println("上传完成。 文件ID:" + fileId);
    	}
    	
    	/*
    	 * [root@mongo_rs1 tmp]# mongofiles list -d pics 
    	 * 2018-07-11T15:05:38.944+0800 connected to: localhost 
    	 * 10.jpg  6644
    	 * http://172.16.160.91/girdfstest/10.jpg
    	 */
    
    	// 查找文件
    	@Test
    	public void findOne2() throws Exception {
    		// 获取文件ID
    		String filename = "10.jpg"; // 根据upload后文件ID修改
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 获取内容
    		GridFSFindIterable gridFSFindIterable = bucket.find(Filters.eq("filename", filename));
    		GridFSFile gridFSFile = gridFSFindIterable.first();
    		System.out.println("filename: " + gridFSFile.getFilename());
    	}	
    	
    	
    
    	// 下载文件
    	@Test
    	public void download2() throws Exception {
    		// 获取文件ID
    		String filename =  "10.jpg";
    		// 获取文件流,定义存放位置和名称
    		File file = new File("C:\tmp\down\10.jpg");
    		
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		// 创建输出流
    		OutputStream os = new FileOutputStream(file);
    		// 下载
    		bucket.downloadToStreamByName(filename, os);
    		//bucket.downloadToStream(filename, os);
    		System.out.println("下载完成。");
    	}
    
    	// 删除文件
    	@Test
    	public void delete2() throws Exception {
    		// 获取文件ID
    		String filename =  "10.jpg";
    		// 创建一个容器,传入一个`MongoDatabase`类实例db
    		GridFSBucket bucket = GridFSBuckets.create(mongoDatabase());
    		
    		GridFSFindIterable gridFSFindIterable = bucket.find(Filters.eq("filename", filename));
    		GridFSFile gridFSFile = gridFSFindIterable.first();
    		// 删除		
    		bucket.delete(gridFSFile.getObjectId());
    		//System.out.println("删除完成。");
    	}
    }
    

    8.pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.neo</groupId>
    	<artifactId>spring-boot-hello</artifactId>
    	<version>1.0</version>
    	<packaging>jar</packaging>
    
    	<name>spring-boot-hello</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.0.RELEASE</version>
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.mongodb</groupId>
    			<artifactId>mongo-java-driver</artifactId>
    			<version>3.2.2</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    
    </project>
    

      

      

  • 相关阅读:
    HDU 1285
    HDU 1251
    HDU 1166
    UVA 10003
    HDU 5968
    CodeForces 371C
    POJ 2456
    POJ 2250
    oracle的start with connect by prior
    Hibernate session中的createCriteria方法
  • 原文地址:https://www.cnblogs.com/amoyzhu/p/9293609.html
Copyright © 2020-2023  润新知