1

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

コードは正常に動作しますが、ファイルは常に、mongodb のデフォルトであるプレフィックス「fs」で始まるコレクションに格納されます。さまざまな種類のファイルを保存するためにさまざまなファイルとチャンクを使用できるように、別のプレフィックスを指定する方法はありますか?

編集:追加の質問

チャンク サイズを指定するにはどうすればよいですか? たとえば、画像ファイルの場合は 2 MB、ビデオ ファイルの場合は 10 MB など、ファイルの種類ごとに異なるチャンク サイズを使用することをお勧めしますか?

4

1 に答える 1

3

GridFSTemplate または GridFSOperations の代わりに GridFS および GridFSInputFile クラスを使用して、両方の質問 (コードでチャンク サイズを構成し、異なるプレフィックスを使用する) に対する解決策を得ました。

異なるチャンクサイズを使用することが望ましいかどうかを知りたいです。

知りたい人のために、コードスニペットを次に示します。

@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 に答える