Я хочу скачать и проанализировать файл с 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");
Я понимаю, что если после выполнения архивированный файл становится пустым, я должен сначала скопировать файл, а затем выполнить операцию распаковки.Но я не знаю, как это сделать, используя «прямой» компонент в качестве триггера.