【发布时间】:2018-08-15 16:09:09
【问题描述】:
当我已经拥有正确的 ObjectId 时,我无法弄清楚如何使用 spring-data-mongodb 及其 GridFSTemplate 从 GridFS 流式传输二进制文件。
GridFSTemplate 返回GridFSResource (getResource()) 或GridFSFile (findX())。
我可以通过 ID 获得GridFSFile:
// no way to get the InputStream?
GridFSFile file = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(id)))
但没有明显的方法可以为该GridFSFile 获取InputStream。
只有GridFSResource 允许我获取对应的InputStream 和InputStreamResource#getInputstream。但获得GridFSResource 的唯一方法是通过filename。
// no way to get GridFSResource by ID?
GridFSResource resource = gridFsTemplate.getResource("test.jpeg");
return resource.getInputStream();
不知何故,GridFsTemplate API 暗示文件名是唯一的——它们不是。 GridFsTemplate 实现只返回第一个元素。
现在我正在使用本机 MongoDB API,一切都变得有意义了:
GridFS gridFs = new GridFs(mongo);
GridFSDBFile nativeFile = gridFs.find(blobId);
return nativeFile.getInputStream();
看起来我误解了 Spring Data Mongo GridFS 抽象背后的基本概念。我希望(至少)以下事情之一是可能的/真实的:
- 通过其 ID 获取
GridFSResource - 获取
GridFSResource或InputStream以获得GridFsFile我已经拥有了
我错了还是 Spring Data MongoDB API 的这个特定部分有什么奇怪的地方?
【问题讨论】:
标签: mongodb spring-data spring-data-mongodb