1

我正在为 mongodb 使用 spring-data 的 GridFsOperations API 将大文件存储在数据库中的块中。这是我的代码:

@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?

4

1 回答 1

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();
}
于 2012-10-08T16:38:45.487 回答