Spring GridFsOperations API,用于在mongo中存储自定义前缀

时间:2012-10-06 12:40:01

标签: mongodb spring-data gridfs

我正在使用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?

1 个答案:

答案 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();
}