2017-05-02 14 views
0

S3にアップロードする前に、各ファイルのMD5を計算しています。私がZipSplitterで使用しているとき、私はそれぞれの解凍されたファイルのMD5を別々に計算したいと思う。 Exchange.getIn()は、単一の解凍されたファイルではなく、zipファイル全体を返します。Camel ZipSplitter - 解凍したファイルのファイル内容を取得するには?

from(source).choice().when(isZipFile) 
       .split(new ZipSplitter()) 
       .streaming() 
       .process(md5HeadersProcessor) 
       .process(camelS3HeadersProcessor) 
       .to(destination) 
       .log("Uploading file ${file:name} completed...") 
       .end() 
       .endChoice() 

MD5HeadersProcessor:

@Override 
public void process(Exchange exchange) throws NoSuchAlgorithmException { 
    byte[] bytes = exchange.getIn().getBody(byte[].class); 
    exchange.getIn().setHeader(S3Constants.CONTENT_MD5, getMD5(bytes)); 
} 

CamelS3HeadersProcessor:

@Override 
public void process(Exchange exchange) throws Exception { 
    SimpleBuilder simpleBuilder = new SimpleBuilder("${file:onlyname}"); 
    String fileName = simpleBuilder.evaluate(exchange, String.class); 
    exchange.getIn().setHeader(S3Constants.KEY, fileName); 
} 

私はCamelS3HeadersProcessorで解凍したファイル名を設定することができています。解凍されたファイルの内容をどうすればMD5HeadersProcessorに取得できますか?

答えて

0

私はこれをZipSplitterからZipFileDataFormat & Iteratorに変更しました。

ZipFileDataFormat zf = new ZipFileDataFormat(); 
zf.setUsingIterator(true); 

from(source).choice().when(isZipFile) 
      .unmarshal(zf) 
      .split(bodyAs(Iterator.class)) 
      .streaming() 
      .convertBodyTo(String.class) 
      .process(md5HeadersProcessor) 
      .process(camelS3HeadersProcessor) 
      .to(destination) 
      .log("Uploading file ${file:name} completed...") 
      .end() 
      .endChoice() 
関連する問題