我有以下测试,它将文件上传到嵌入式apache ftp服务器,然后检查文件是否正确上传。
@Test
public void testUploadFile() {
String fileName = "test.txt";
ftpUploader.upload("/data/" + fileName);
RemoteFileTemplate<FTPFile> template = new RemoteFileTemplate<>(this.ftpSessionFactory);
FTPFile[] files = template.execute(session -> session.list(fileName));
assertThat(files).hasSize(1);
assertThat(files[0].getSize()).isEqualTo(FILE_CONTENT_SIZE);
}
我正在使用Spring Integration。通过RemoteFileTemplate我知道文件是否存在且大小正确。如果我在我的IDE中执行此测试它工作正常。包括所有测试的maven构建也可以。但是,在Jenkins服务器上,第二个断言失败
org.junit.ComparisonFailure: expected:<2[318796]L> but was:<2[290518]L>
可能是什么原因?模板是否下载文件,即使它没有完全上传?实际上情况并非如此,因为只要仍然写入,ftpUploader会将结尾.writing附加到文件中。 FtpUpload如下所示
@MessagingGateway
public interface FtpUpload {
@Gateway(requestChannel = "ftpUploadChannel")
void upload(String fileName);
}
@Bean
IntegrationFlow upload() {
return IntegrationFlows.from("ftpUploadChannel")
.<String, File>transform(fileName -> new File(this.getClass().getResource(fileName).getFile()))
.handle(Ftp.outboundAdapter(ftpSessionFactory())
.remoteDirectory(ftpRemoteDir)
.autoCreateDirectory(true)
.useTemporaryFileName(true)
)
.get();
}
答案 0 :(得分:0)
大多数FTP客户端默认使用ASCII
模式传输文件。在此模式下,换行符将被更改。因此,在您的情况下,在不同环境中运行时文件大小会发生变化。最可能的原因是在一个环境中换行符。