Java操作Mongodb之文件读写
来源:互联网 发布:python 计算 macd 编辑:程序博客网 时间:2024/05/19 05:01
Maven依赖:
<dependency><groupId>org.mongodb.morphia</groupId><artifactId>morphia</artifactId><version>1.1.0</version><exclusions><exclusion><artifactId>mongo-java-driver</artifactId><groupId>org.mongodb</groupId></exclusion></exclusions></dependency><dependency><artifactId>mongo-java-driver</artifactId><groupId>org.mongodb</groupId><version>3.0.2</version></dependency>
**Controller.java中的Mapping映射:
@RequestMapping(value = "/uploadFileToMongo")public JSONMessage uploadFileToMongo(MultipartFile file, String id, String filename, String collection){if (file != null && file.getName() != null && !file.isEmpty()) {byte[] bytes=null;try {bytes = file.getBytes();} catch (IOException e) {e.printStackTrace();}MongoFileOperationUtil.saveFile(bytes ,id, filename, collection);return JSONMessage.success();} else {return JSONMessage.failure("上传文件为空!");}}@RequestMapping(value = "/downloadFileFromMongo")public JSONMessage downloadFileFromMongo(String id, String filename, String collection, String contentType) {try {response.setHeader("Content-Disposition", "attachment;fileName=" + filename);InputStream inputStream = MongoFileOperationUtil.readFile(id, filename, collection, contentType);OutputStream os = response.getOutputStream();byte[] b = new byte[2048];int length;while ((length = inputStream.read(b)) > 0) {os.write(b, 0, length);}os.close();inputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return JSONMessage.success();}@RequestMapping(value = "/removeFileFromMongo")public JSONMessage removeFileFromMongo(String id, String filename, String collection, String contentType) {try {MongoFileOperationUtil.removeFile(id, filename, collection, contentType);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return JSONMessage.success();}
MongoFileOperationUtil是自己封装的一个工具类:
@Component public class MongoFileOperationUtil {private static AdvancedDatastore dsForRW;private static final Logger log = LoggerFactory.getLogger(MongoFileOperationUtil.class);@Autowiredpublic void setDatastore(AdvancedDatastore dsForRW) {MongoFileOperationUtil.dsForRW = dsForRW;}public static void saveFile(File file, String id, String collection) {if (!file.exists()) {throw new ServiceException("文件没有找到");}try {// 连接数据库DB db = dsForRW.getDB();// 文件操作是在DB的基础上实现的,与表和文档没有关系GridFS gridFS = null;gridFS = new GridFS(db);GridFSInputFile mongofile = gridFS.createFile(file);// 添加属性if (id != null) {mongofile.put("_id", id);// 对应id}String filename=file.getName();if (filename != null) {mongofile.put("filename", filename);// 文件名称if (filename.lastIndexOf(".") > 0) {mongofile.put("contentType", filename.substring(filename.lastIndexOf(".") + 1));// 文件类型}}if (collection != null) {mongofile.put("collection", collection);// 所属集合}mongofile.save();// 保存} catch (Exception e) {e.printStackTrace();log.info("存储文件异常,id:" + id + ",所属集合:" + collection);}}public static void saveFile(byte[] data, String id, String filename, String collection) {if (data == null || data.length == 0) {throw new ServiceException("bytes不能为空");}try {// 连接数据库DB db = dsForRW.getDB();// 文件操作是在DB的基础上实现的,与表和文档没有关系GridFS gridFS = null;gridFS = new GridFS(db);GridFSInputFile mongofile = gridFS.createFile(data);// 添加属性if (id != null) {mongofile.put("_id", id);// 对应id}if (filename != null) {mongofile.put("filename", filename);// 文件名称if (filename.lastIndexOf(".") > 0) {mongofile.put("contentType", filename.substring(filename.lastIndexOf(".") + 1));// 文件类型}}if (collection != null) {mongofile.put("collection", collection);// 所属集合}mongofile.save();// 保存} catch (Exception e) {e.printStackTrace();log.info("存储文件异常,id:" + id + ",所属集合:" + collection);}}public static InputStream readFile(String id, String filename, String collection, String contentType)throws Exception {// 连接数据库DB db = dsForRW.getDB();GridFS gridFs = null;gridFs = new GridFS(db);// 查找条件DBObject query = new BasicDBObject();if (id != null) {query.put("_id", id);}if (filename != null) {query.put("filename", filename);}if (collection != null) {query.put("collection", collection);}if (contentType != null) {query.put("contentType", contentType);}// 查询的结果GridFSDBFile gridDBFile = gridFs.findOne(query);// 返回字节流return gridDBFile.getInputStream();}public static void removeFile(String id, String filename, String collection, String contentType) throws Exception {// 连接数据库DB db = dsForRW.getDB();GridFS gridFs = null;gridFs = new GridFS(db);// 查找条件DBObject query = new BasicDBObject();if (id != null) {query.put("_id", id);}if (filename != null) {query.put("filename", filename);}if (collection != null) {query.put("collection", collection);}if (contentType != null) {query.put("contentType", contentType);}gridFs.remove(query);}}
去Mongo里面查看(楼主这里用的是MongoBooster客户端):
根据查询参数,从Mongodb下载图片:
根据查询参数,删除Mongodb图片:
可以在Mongodb里面看到,代表文件的那一条数据已经被删除了:
1 0
- Java操作Mongodb之文件读写
- Java之文件读写操作
- java操作spark读写mongodb
- java文件读写操作之io流
- java 读写文件操作
- java读写文件操作
- Java文件读写操作
- JAVA读写文件操作
- java文件读写操作
- Java文件读写操作
- java文件读写操作
- java 文件读写 操作
- java 文件读写操作
- JAVA读写文件操作
- java文件读写操作
- 文件读写操作-Java
- Java --- 读写文件操作
- Java文件读写操作
- B-树、后缀数组、网络流算法、问题规约、不可解性
- VC编译出现如下错误:错误1error C2664: “wsprintfW”: 不能将参数 2 从“const char [6]”转换为“LPCWSTR”e:\c_2008\pra6\pra6\
- C++写文件的text模式和binary模式
- tbody标签的作用介绍
- 入冬最冷的上海——致在外漂泊的孩子
- Java操作Mongodb之文件读写
- AutoCompleteTextView 自动提示
- Dragonbaord 410c Python交互设计(3)——天气预报demo数据解析
- ScheduledExecutorService执行周期任务
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- java接收IOS上传的图片文件multipart/form-data类型
- solr6.x配置文件managed-schema说明
- linux内核部件分析(四)——更强的链表klist
- eclipse启动报错