1

Я пытаюсь использовать S3InboundFileSynchronizer для синхронизации S3Bucket с локальным каталогом. Ковш организован с подкаталогами, такие как:Как использовать S3InboundFileSynchronizer для синхронизации S3Bucket, организованного с каталогами?

bucket -> 2016 -> 08 -> daily-report-20160801.csv daily-report-20160802.csv и т.д ...

Используя эту конфигурацию:

@Bean 
     public S3InboundFileSynchronizer s3InboundFileSynchronizer() { 
      S3InboundFileSynchronizer synchronizer = new S3InboundFileSynchronizer(amazonS3()); 
      synchronizer.setDeleteRemoteFiles(true); 
      synchronizer.setPreserveTimestamp(true); 
      synchronizer.setRemoteDirectory("REDACTED"); 
      synchronizer.setFilter(new S3RegexPatternFileListFilter(".*\\.csv$")); 
      Expression expression = PARSER.parseExpression("#this.substring(#this.lastIndexOf('/')+1)"); 
      synchronizer.setLocalFilenameGeneratorExpression(expression); 
      return synchronizer; 
     } 

Я могу получить как подключение к ковшу и перечисляя его содержание. Когда приходит время, чтобы читать из ведра следующее исключение:

org.springframework.messaging.MessagingException: Problem occurred while synchronizing remote to local directory; nested exception is 
org.springframework.messaging.MessagingException: Failed to execute on session; 
nested exception is 
java.lang.IllegalStateException: 'path' must in pattern [BUCKET/KEY]. 
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:266) 

Просмотр кода, кажется, что было бы невозможно когда-либо синхронизировать S3Bucket ж/подкаталогов:

private String[] splitPathToBucketAndKey(String path) { 
    Assert.hasText(path, "'path' must not be empty String."); 
    String[] bucketKey = path.split("/"); 
    Assert.state(bucketKey.length == 2, "'path' must in pattern [BUCKET/KEY]."); 
    Assert.state(bucketKey[0].length() >= 3, "S3 bucket name must be at least 3 characters long."); 
    bucketKey[0] = resolveBucket(bucketKey[0]); 
    return bucketKey; 
} 

Есть ли какая-то конфигурация, которую мне не хватает или это ошибка?

(я предполагаю, что это ошибка «, пока я сказал иначе, поэтому я представил pull request с предложенным исправлением.)

+0

ОК. Поскольку вы даже подняли вопрос SO, я переключусь на вашу проблему :-) –

ответ

0

Да, это ошибка и представил PullRequest хорошо для исправления.

Только решение в качестве обходного решения похоже на пользовательский SessionFactory<S3ObjectSummary>, который возвращает пользовательское расширение S3Session с предоставленным исправлением в PR.

Смежные вопросы