有一个Spring Boot应用程序,我打算在其中将文件放置在S3目标存储桶的文件夹中。 target-bucket / targetsystem-folder / file.csv
每个文件的目标系统文件夹名称都不同,这些文件将从yml配置文件中检索。
如果文件夹未退出并且文件应放置在文件夹下,则必须通过代码创建目标系统文件夹
据我所知,S3存储桶中没有文件夹概念,所有文件夹都存储为对象。
已经阅读了一些文档,例如将文件放在文件夹下,必须给出诸如targetsystem-folder / file.csv和bucket = target-bucket之类的键表达式。 但这无法解决。想使用spring-integration-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>
任何人都可以指导这个问题
答案 0 :(得分:3)
您的问题arma::lu
中的SpEL错误。只需尝试从常规Java代码开始,然后想象一下您如何构建这样的值。然后,您将发现表达式中缺少串联操作:
key-expression
另外,请在将来提供有关错误的更多信息。在大多数情况下,堆栈跟踪非常有用。
答案 1 :(得分:0)
在我之前从事的项目中,我只是使用了提供的java aws sdk。然后在实现过程中,我做了类似的事情
private void uploadFileTos3bucket(String fileName, File file) {
s3client.putObject(new PutObjectRequest("target-bucket", "/targetsystem-folder/"+fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
我不再创建配置。如果不存在,它将自动在存储桶中创建/targetsystem-folder
(然后将文件放入其中),否则,将文件放入其中。
您可以参考this answer,以进一步了解该主题。
S3中没有“子目录”。有水桶,有 存储桶中的键。
您可以使用前缀搜索来模拟传统目录。对于 例如,您可以将以下密钥存储在存储桶中:
foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2