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

Я хочу скачать и проанализировать файл с 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"); 

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

0 ответов

Другие вопросы по тегам