设为首页 收藏本站
查看: 2324|回复: 0

[经验分享] MongoDB存放文件

[复制链接]

尚未签到

发表于 2015-7-8 05:08:11 | 显示全部楼层 |阅读模式
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 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 VALID_FIELDS = Collections.unmodifiableSet( new HashSet( Arrays.asList( new String[]{
"_id" , "filename" , "contentType" , "length" , "chunkSize" ,
"uploadDate" , "aliases" , "metadata" , "md5"
} ) ) );

path去掉就ok了~~~
文档还是比较差劲啊~~~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84171-1-1.html 上篇帖子: mongoDB、redis、Mysql的count、limit性能比较与分析 下篇帖子: Mongodb Manual阅读笔记:CH7 索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表