java mongodb 读取文件_Java操作Mongodb之文件读写

本文展示了如何使用Java的Morphia库和MongoDB进行文件的上传、下载及删除操作。通过MultipartFile接收文件,利用GridFS存储到MongoDB,并通过查询参数实现文件的读取和删除。
摘要由CSDN通过智能技术生成

Maven依赖:

org.mongodb.morphia

morphia

1.1.0

mongo-java-driver

org.mongodb

mongo-java-driver

org.mongodb

3.0.2

**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);

@Autowired

public 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);

}

}

这里用Postman模拟上传文件的Post请求:

372560aea0bae1f85218109084b9bf6d.png

去Mongo里面查看(楼主这里用的是MongoBooster客户端):

e58c2f64fb81b890563f5496eab97146.png

根据查询参数,从Mongodb下载图片:

71da347557704591ee3aecb0483db0b2.png

根据查询参数,删除Mongodb图片:

f6bb6e91240d9d03d4859dbcb126006b.png

可以在Mongodb里面看到,代表文件的那一条数据已经被删除了:

80a583b1abe7acde9e45eb9339abc718.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值