Spring 将文件放入S3 bucket的文件夹中

Spring 将文件放入S3 bucket的文件夹中,spring,spring-boot,spring-integration,spring-integration-sftp,spring-integration-aws,Spring,Spring Boot,Spring Integration,Spring Integration Sftp,Spring Integration Aws,有一个SpringBoot应用程序,我尝试将一个文件放在S3目标bucket的文件夹中。目标bucket/targetsystem文件夹/file.csv 将从yml配置文件检索的每个文件的targetsystem文件夹名称将不同 如果文件夹未退出,则必须通过代码创建targetsystem文件夹,并将文件放在该文件夹下 据我所知,S3 bucket中没有文件夹概念,所有文件夹都存储为对象 阅读过一些文档,比如将文件放在文件夹下,必须给出关键表达式,比如targetsystem folder/f

有一个SpringBoot应用程序,我尝试将一个文件放在S3目标bucket的文件夹中。目标bucket/targetsystem文件夹/file.csv

将从yml配置文件检索的每个文件的targetsystem文件夹名称将不同

如果文件夹未退出,则必须通过代码创建targetsystem文件夹,并将文件放在该文件夹下

据我所知,S3 bucket中没有文件夹概念,所有文件夹都存储为对象

阅读过一些文档,比如将文件放在文件夹下,必须给出关键表达式,比如targetsystem folder/file.csv和bucket=target bucket。 但是它不起作用。希望使用spring集成aws而不直接使用aws sdk来实现这一点

    <int-aws:s3-outbound-channel-adapter id="filesS3Mover"
        channel="filesS3MoverChannel"
        transfer-manager="transferManager"
        bucket="${aws.s3.target.bucket}"
        key-expression="headers.targetsystem-folder/headers.file_name"
        command="UPLOAD">
</int-aws:s3-outbound-channel-adapter>


在我之前工作的项目中,我只使用了提供的java aws sdk,是否有人能就这个问题提供指导。然后在我的实现中,我做了这样的事情

private void uploadFileTos3bucket(String fileName, File file) {
    s3client.putObject(new PutObjectRequest("target-bucket", "/targetsystem-folder/"+fileName, file)
            .withCannedAcl(CannedAccessControlList.PublicRead));
}
我没有创建更多的配置。它会自动在bucket中创建
/targetsystem文件夹
(然后将文件放入其中),如果文件不存在,则将文件放入其中


你可以作为参考,进一步解释这个问题

S3中没有“子目录”。有水桶,也有水桶 桶中的钥匙

您可以通过使用前缀搜索来模拟传统目录。对于 例如,您可以在存储桶中存储以下密钥:


您的问题是
键表达式中的SpEL错误。试着从常规Java代码开始,想象一下您希望如何构建这样一个值。然后,您将发现表达式中缺少连接操作:

 key-expression="headers.targetsystem-folder + '/' + headers.file_name"

此外,请在将来提供有关错误的更多信息。在大多数情况下,堆栈跟踪非常有用。

谢谢您的回复。我想知道这可以通过使用spring-integration-aws本身使用出站适配器而不直接使用aws sdk来实现。抱歉,我不理解您的问题。希望您尽快找到答案。此答案明确显示了Spring Integration在其
S3MessageHandler
中的功能,但没有提供任何关于Spring Integration AWS扩展的原始请求的线索。请看我的答案。是的,我误解了他的问题,因为我以前没有使用
spring集成aws
。对此我很抱歉。谢谢你的回答,因为我将来可能也需要它+1它起作用了。正如所建议的,我们将在将来的问题中提供堆栈跟踪。
 key-expression="headers.targetsystem-folder + '/' + headers.file_name"