使用GridFS类向mongodb添加文件(图片)

一、在eclipse中直接创建maven项目

二、在pom.xml中添加

<properties>
<!--使用utf-8编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--web -->
<spring.version>4.3.14.RELEASE</spring.version>
<!--数据库相关 -->
<mysql.version>5.1.40</mysql.version>
</properties>


<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>


        <!-- mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>


<!--Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>


<!--springIOC -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>






<!--spring-oxm依赖 -->
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor-xml</artifactId>
<version>1.4.1</version>
</dependency>


<!--spring-json依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core
</groupId>
<artifactId>jackson-core
</artifactId>
<version>2.7.3
</version>
</dependency>


<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>


<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.3</version>
</dependency>


<!--<dependency> -->
<!--<groupId>com.fasterxml.jackson.dataformat</groupId> -->
<!--<artifactId>jackson-dataformat-xml</artifactId> -->
<!--<version>2.9.4</version> -->
<!--</dependency> -->


<!--spring-aop依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>


<!--上传文件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>


<!--mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>


<!--C3P0 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>


<!--Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>


<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>


</dependencies>


<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>


<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<finalName>项目名</finalName>
</build>

</project>

 

三、创建class连接mongodb

1、引入jar包

import java.io.File;
import java.util.UUID;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;

import com.mongodb.gridfs.GridFSInputFile;

2、创建main方法

public class GridFSTest {
public static void main(String[] args) throws Exception {
       saveFile();
         //readFile();
    

    }

}

3、创建第一个静态方法(向mongodb插入文件)

public static void saveFile() throws Exception{

         try {

            //连接mongodb,本地的ip和mongodb端口号

             MongoClient mongoClient = new MongoClient("localhost", 27017);

            //连接数据库和集合,集合名可不填,GridFS 会默认创建两个集合(js.files(存储源文件),js.chunks(存储文件块,每块              //256kb,一张图片会被切割为256kb的文件块))

             DB db=mongoClient.getDB("数据库名",“集合名”);

            //设置存储文件名

             String newFileName="photo";

            //利用GridFS 管理数据库

             GridFS gridFS = new GridFS(db);
             //得到文件流
             String fileName="111.jpg";
             File readFile=new File("E:/"+fileName);
             //设置文件UUID防止重复,唯一标记文件

             String fileUUIDName= UUID.randomUUID().toString();

             //将文件输入流封装到GridFS的文件流

             GridFSInputFile gfs = gridFS.createFile(readFile);

             //封装UUID

             gfs.setId(fileUUIDName);
             //封装文件名

             gfs.setFilename(fileUUIDName);

             //插入数据

             gfs.save();

         } catch (Exception e) {
             e.printStackTrace();
             System.out.println("出现错误,文件插入失败");
         }

     }

4、创建第二个静态方法(从mongodb取文件)

public static void readFile(){
    try {
      //MongoClient 是mongodb的2.4.1版本之后出现的连接mongo的类
           // Mongo mongo=new Mongo();(不建议使用)
           MongoClient mongoClient = new MongoClient("localhost", 27017);
            DB db=mongo.getDB("smartsite");
            GridFS gridFs=null;
            gridFs=new GridFS(db);
             //创建query方法
            // DBObject query=new BasicDBObject();
            //查找数据库下fs.files集合所有数据
            // List<GridFSDBFile> listfiles=gridFs.find(query);

            // GridFSDBFile gridDBFile=listfiles.get(0);

             //设置新文件名

            String newFileName="photo";

            //设置需要查找的id

            String id="b3c26e45-a972-4d4a-a475-aff8e8197ceb";
            // GridFSDBFile gridDBFile=gridFs.findOne(new ObjectId("5b444f65ae1ff21b6832173a"));

         //GridFSDBFile gridDBFile=gridFs.findOne(new ObjectId(id));

          //设置查找条件

         DBObject query  = new BasicDBObject("_id", id);

         GridFSDBFile gridDBFile = gridFs.findOne(query);

          //设置新文件名

          String fileName=(String)gridDBFile.get("filename");
          //下载到path文件下
          File writeFile=new File("path"+fileName+".jpg");
          if(!writeFile.exists()){
               writeFile.createNewFile();
            }
         //写入记录的存储
          gridDBFile.writeTo("d:/a.txt");
        //文件流输出
          gridDBFile.writeTo(writeFile);       
      } catch (Exception e) {
      e.printStackTrace();
      }
    }

 

注意:

上传文件需在spring中配置文件解析器

<!-- 文件解析器 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
        <property name="maxUploadSize">
            <!--最大上傳長度 9M -->
            <value>9437184</value>
        </property>
        
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值