【问题标题】:Spring GridFsOperations API for storing in mongo with a custom prefixSpring GridFsOperations API,用于使用自定义前缀存储在 mongo 中
【发布时间】:2012-09-27 09:57:37
【问题描述】:

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

【问题讨论】:

  • 好吧,我发现了如何使用其他前缀直接使用 GridFSTemplate 而不是 GridFSOperations,这似乎仍在开发中。现在,我只想知道如何修复块大小以及在 mongo 中强制特定大小是否好。

标签: mongodb spring-data gridfs


【解决方案1】:

我使用 GridFS 和 GridFSInputFile 类而不是 GridFSTemplate 或 GridFSOperations 来解决我的两个问题(在我的代码中配置块大小并使用不同的前缀)。

我仍然想知道是否建议使用不同的块大小。

对于任何可能想知道的人,这里是代码 sn-p:

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

【讨论】:

  • 您正在直接使用 MongoDB Java API。如果 Spring-Data 增强它的 GridFS API 以支持在存储文档时选择存储桶,那就太好了。
猜你喜欢
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2021-09-11
  • 2018-01-05
  • 1970-01-01
相关资源
最近更新 更多