使用spring-integration-aws S3MessageHandler

时间:2016-07-09 22:49:38

标签: spring-integration

我已经从spring-integration-aws配置了一个S3MessageHandler来将File对象上传到S3。

上传失败,并显示以下跟踪:

  

引起:com.amazonaws.AmazonClientException:数据读取的长度与预期的不同:dataLength = 0; expectedLength = 26; includeSkipped = FALSE; in.getClass()= class com.amazonaws.internal.ResettableInputStream; markedSupported = TRUE;标记= 0; resetSinceLastMarked = FALSE; markCount = 1; resetCount = 0       在com.amazonaws.util.LengthCheckInputStream.checkLength(LengthCheckInputStream.java:152)   ...

查看S3MessageHandler的源代码,我不确定如何上传File会成功。跟踪执行时,s3MessageHandler.upload()方法执行以下操作:

  • 为文件创建FileInputStream。
  • 使用输入流计算文件内容的MD5哈希值。
  • 如果可以重置流,则重置流(FileInputStream不可用)。
  • 使用输入流设置S3传输。这是因为流处于EOF,因此可转移字节的数量与Content-Length标头中的内容不匹配。

我错过了什么,或者这是消息处理程序中的错误?

1 个答案:

答案 0 :(得分:0)

是;这是一个错误;请打开Issue in GitHub和/或JIRA Issue

对于FileInputStream,应为InputStream个有效负载创建一个新的,如果MD5使用该流,我们需要声明markSupported()为真。

在"签署"之后考虑Contributing a fix CLA。

修改

我打开了JIRA Issue INTEXT-225