当我已经有了正确的ObjectId
时,我不知道如何用spring数据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
能让我用InputStreamResource#getInputstream
找到对应的InputStream
.但获得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数据Mongo GridFS抽象背后的基本概念.我希望(至少)以下事情之一是可能的/真实的:
- 按ID取
GridFSResource
- 拿
GridFSResource
或InputStream
换GridFsFile
我已经有了
是我错了,还是Spring数据MongoDB API的这一部分有什么奇怪的地方?