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
中设置解压后的文件名。如何在 MD5HeadersProcessor
中获取解压缩文件的内容?
在我将其从 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()
我在上传到 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
中设置解压后的文件名。如何在 MD5HeadersProcessor
中获取解压缩文件的内容?
在我将其从 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()