• MongoDB存放文件


    package test;

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

    import com.mongodb.DB;
    import com.mongodb.Mongo;
    import com.mongodb.MongoException;
    import com.mongodb.gridfs.GridFS;
    import com.mongodb.gridfs.GridFSDBFile;
    import com.mongodb.gridfs.GridFSInputFile;
    /**
    * 将一系列图片文件存储到MongoDB中
    * @author Kaka
    *
    */
    public class MongFileTest {
    String path="D:\\img\\original";
    File[]listFile(){
    File directory=new File(path);
    return directory.listFiles();
    }
    public static void main(String[] args) throws MongoException, IOException {
    //
    MongFileTest mft=new MongFileTest();
    //连接服务器
    Mongo mongo=new Mongo("127.0.0.1", 27017);
    //数据库
    DB db=mongo.getDB("files");
    //存储fs的根节点
    GridFS gridFS=new GridFS(db,"pictures");
    //列出文件下目录
    File []files=mft.listFile();
    //遍历存储近MongoDB
    for (File file : files) {
    System.out.println("save "+file.getAbsoluteFile());
    GridFSInputFile gfs=gridFS.createFile(file);
    gfs.put("filename", file.getName());
    gfs.put("path", file.getAbsoluteFile());
    gfs.put("contentType", file.getName().substring(file.getName().lastIndexOf(".")));
    gfs.save();
    }
    //检索
    List<GridFSDBFile> list =gridFS.find("201008171282033626670.jpg");
    for (GridFSDBFile dbFile : list) {
    String name="t.jpg";
    dbFile.writeTo(name);
    System.out.println("out put to "+name);
    name="t"+name;
    }       
    }

    }
    运行一下,对不起,报错
    Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class java.io.File
    at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:185)
    at org.bson.BSONEncoder.putObject(BSONEncoder.java:119)
    at org.bson.BSONEncoder.putObject(BSONEncoder.java:65)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:176)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:134)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:129)
    at com.mongodb.DBCollection.save(DBCollection.java:418)
    at com.mongodb.gridfs.GridFSFile.save(GridFSFile.java:39)
    at com.mongodb.gridfs.GridFSInputFile.save(GridFSInputFile.java:67)
    at test.MongFileTest.main(MongFileTest.java:42)
    错误还挺怪异,can't serialize class java.io.File,晕头转向。。。。。
    根本找不着问题是在哪...注(这里使用的mongo.jar是2.1版)
    Google查好像也没人出这个错。考虑换个jar包...
    换了2.0和1.4
    最后1.4报错比较靠谱...
    报错是:"GridFSFile don't know about key [" + ***+ "] converting to metadata "
    看了下它的源码,原来文件存储不是你想往里放什么key-value就放什么kv的,指定类型:
    final static Set<String> VALID_FIELDS = Collections.unmodifiableSet( new HashSet( Arrays.asList( new String[]{
    "_id" , "filename" , "contentType" , "length" , "chunkSize" ,
    "uploadDate" , "aliases" , "metadata" , "md5"
    } ) ) );

    path去掉就ok了~~~
    文档还是比较差劲啊~~~
  • 相关阅读:
    网络爬虫技术总结
    MongoDB(7):集群部署实践,包含复制集,分片
    MongoDB(6):简单配置,环境变量,关闭服务
    Mongod(5):启动命令mongod参数说明
    MongoDB(4):多种方式关闭服务命令
    Linux下的Source命令及脚本的执行方式解析
    linux第一天
    echarts 各种细节问题
    MongoDB(3):小的细节问题
    获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
  • 原文地址:https://www.cnblogs.com/macula7/p/1960391.html
Copyright © 2020-2023  润新知