我正在使用mongodb的spring-data的GridFsOperations API在db中以块的形式存储大文件。这是我的代码:
@Autowired
private GridFsOperations gridOperation;
public String save(InputStream inputStream, String contentType, String filename) {
...
GridFSFile file = gridOperation.store(inputStream, filename, metaData);
return file.getId().toString();
}
代码工作正常,但它始终将文件存储在以前缀“fs”开头的集合中,这是mongodb中的默认值。有没有办法指定不同的前缀,以便我可以为不同类型的文件存储不同的文件和块?
编辑:附加问题
如何指定块大小?是否建议为不同类型的文件使用不同的块大小,例如 - 图像文件为2 mb,视频文件为10 mb?
答案 0 :(得分:3)
我使用GridFS和GridFSInputFile类而不是GridFSTemplate或GridFSOperations来解决我的问题(在我的代码中配置块大小并使用不同的前缀)。
我仍然想知道是否建议使用不同的块大小。
对于任何想知道的人,这里是代码片段:
@Autowired
private MongoDbFactory dbFactory;
public String save(InputStream inputStream, String contentType, String filename, String username, String bucket) {
DBObject metaData = ....(create metadata here)
GridFS gridFS = new GridFS(dbFactory.getDb(), bucket);
GridFSInputFile gridFSInputFile = gridFS.createFile(inputStream);
gridFSInputFile.setMetaData(metaData);
if(bucket.equals("photo")){
gridFSInputFile.setChunkSize(1024000); //1 mb
} else if(bucket.equals("mp3")){
gridFSInputFile.setChunkSize(10240000); //10 mb
}
try {
gridFSInputFile.saveChunks();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
gridFSInputFile.save();
return gridFSInputFile.getId().toString();
}