Загрузите zip-файл через Apache Camel и распакуйте копию файла, не затрагивая оригинальный загруженный zip-файл - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу скачать и проанализировать файл с URL, используя APACHE CAMEL.Файл заархивирован.Я хочу, чтобы копия файла была разархивирована, а также сохранила файл ZIP в некотором каталоге.

Я могу загрузить и распаковать файл по следующему маршруту:

from("direct:getZipFile")
.setHeader(Exchange.HTTP_METHOD,constant("GET"))
.setHeader(Exchange.ACCEPT_CONTENT_TYPE,constant("application/zip"))
.to("http://spatialkeydocs.s3.amazonaws.com/FL_insurance_sample.csv.zip")
.to(direct:unzipFile")
.log("getZip completed")
.end();

from("direct:unzipFile")
.split(new ZipSplitter())
.streaming()
.convertBodyTo(String.class)
.choice()
.when(body().isNotNull())
.to("file:C:\\MyFiles\\File\\Unzipped")
.log("Unzipped file");

Но когда япопробуйте сохранить zip-файл в одном прямом маршруте и разархивировать файл в другом маршруте, тогда будет работать только распакованный маршрут, а в каталоге, в котором предполагается хранить zip-файл, есть пустой zip-файл.

 from("direct:getZipFile")
.setHeader(Exchange.HTTP_METHOD,constant("GET"))
.setHeader(Exchange.ACCEPT_CONTENT_TYPE,constant("application/zip"))
.to("http://spatialkeydocs.s3.amazonaws.com/FL_insurance_sample.csv.zip")
.multicast()
.to("direct:storeZipFile","direct:unzipFile")
.log("getZip completed")
.end();

from("direct:storeZipFile")
.to("file:C:\\MyFiles\\File\\?fileName=sameple.csv.zip")
.log("Zip file Stored");


from("direct:unzipFile")
.split(new ZipSplitter())
.streaming()
.convertBodyTo(String.class)
.choice()
.when(body().isNotNull())
.to("file:C:\\MyFiles\\File\\Unzipped")
.log("Unzipped file"); 

Я понимаю, что если после выполнения архивированный файл становится пустым, я должен сначала скопировать файл, а затем выполнить операцию распаковки.Но я не знаю, как это сделать, используя «прямой» компонент в качестве триггера.

...