簡體   English   中英

Camel ZipSplitter-如何獲取解壓縮文件的文件內容?

[英]Camel ZipSplitter - How to get the file content of unzipped file?

在上傳到S3之前,我正在計算每個文件的MD5。 當我與ZipSplitter一起使用時,我想分別計算每個未壓縮文件的MD5。 Exchange.getIn()提供整個zip文件,而不是單個未壓縮的文件。

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設置解壓縮的fileName。 我如何在MD5HeadersProcessor獲取解壓縮文件的內容?

我將其從ZipSplitter更改為ZipFileDataFormatIterator后,其工作正常。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM