Mule은 요소를 사용하여 gzip 압축을 지원합니다. 클라이언트가 현재 ZIP 압축을 원하지만 파일은 압축 압축 파일 :(Mule Zip 파일을 FTP 서버쪽으로 압축 파일을 보냅니다.
나는 다음과 같은 시나리오를 노새에 어려움이 같은 FTP에 배치해야하기 때문에 : 파일이 오는 곳 나는 스프링 빈을 생성
.에 나는 ZipOutputStream이 클래스를 사용하여이 파일을 압축하고 우리의 ftp를 향해을 전달하려는이 내 흐름의 구성이다. 이것은 내 zipCompressor의 코드가
<flow name="testFlow" initialState="stopped">
<file:inbound-endpoint path="${home.dir}/out" moveToDirectory="${hip.dir}/out/hist" fileAge="10000" responseTimeout="10000" connector-ref="input"/>
<component>
<spring-object bean="zipCompressor"/>
</component>
<set-variable value="#[message.inboundProperties.originalFilename]" variableName="originalFilename" />
<ftp:outbound-endpoint host="${ftp.host}" port="${ftp.port}" user="${ftp.username}" password="${ftp.password}" path="${ftp.root.out}" outputPattern="#[flowVars['originalFilename']].zip" />
</flow>
입니다 :
@Component
public class ZipCompressor implements Callable {
private static final Logger LOG = LogManager.getLogger(ZipCompressor.class.getName());
@Override
@Transactional
public Object onCall(MuleEventContext eventContext) throws Exception {
if (eventContext.getMessage().getPayload() instanceof File) {
final File srcFile = (File) eventContext.getMessage().getPayload();
final String fileName = srcFile.getName();
final File zipFile = new File(fileName + ".zip");
try {
// create byte buffer
byte[] buffer = new byte[1024];
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
FileInputStream fis = new FileInputStream(srcFile);
// begin writing a new ZIP entry, positions the stream to the start of the entry data
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
// close the InputStream
fis.close();
// close the ZipOutputStream
zos.close();
}
catch (IOException ioe) {
LOG.error("Error creating zip file" + ioe);
}
eventContext.getMessage().setPayload(zipFile);
}
return eventContext.getMessage();
}
}
단위 테스트를 작성했으며 압축률이 뛰어납니다. 파일은 실제로 올바른 이름으로 FTP로 전송되지만 zip 파일은 유효하지 않으며 NotePad ++에서 열면 원래 파일 이름 만 포함됩니다.
나는 Zip 파일을 노새 흐름으로 되돌려 보내는데 문제가 있다고 생각하지만, 지금 당장 붙어서 어떤 도움을 주시면 감사하겠습니다! 지금있는 test.txt로 파일 이름을 설정하는 기준으로
나는 당신의 흐름과 zipCompressor의 사본을 달렸다. 나는 파일을 또한 얻고있다, 그러나 파일은 결코 압축되지 않는다. 그것은 원래 상태입니다. – tbriscoe