我想使用APACHE CAMEL从URL下载并解析文件。该文件已压缩。我希望将文件副本解压缩,并将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文件存储在一个直接路径中并在另一路径中将其解压缩时,则只有解压缩的路径正在起作用,并且应该存储压缩文件的目录中有一个空的压缩文件。
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");
我知道,如果压缩后的文件在执行后变空,那么我应该先复制该文件,然后再执行解压缩操作。但是我不知道如何通过使用“直接”组件作为触发器来做到这一点。