将文件放入 S3 存储桶的文件夹中
Placing file inside folder of S3 bucket
有一个 spring 启动应用程序,我想在其中放置一个文件到 S3 目标存储桶的文件夹中。 target-bucket/targetsystem-folder/file.csv
每个将从 yml 配置文件中检索的文件的目标系统文件夹名称都不同。
如果文件夹不退出,则必须通过代码创建目标系统文件夹,文件应放在文件夹下
据我所知,S3 bucket中没有文件夹的概念,都是作为对象存储的。
读过一些文档喜欢将文件放在文件夹下,必须给出像 targetsystem-folder/file.csv 和 bucket = target-bucket 这样的 key-expression。
但它不起作用 out.Would 喜欢使用 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>
任何人都可以指导这个问题
之前在做的项目中,我只是使用了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,进一步解释该主题。
There are no "sub-directories" in S3. There are buckets and there are
keys within buckets.
You can emulate traditional directories by using prefix searches. For
example, you can store the following keys in a bucket:
foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2
你的问题是key-expression
中的SpEL是错误的。只需尝试从常规 Java 代码开始,想象一下您希望如何构建这样一个值。然后你会发现你的表达式中缺少连接操作:
key-expression="headers.targetsystem-folder + '/' + headers.file_name"
另外,请日后提供更多有关错误的信息。在大多数情况下,堆栈跟踪非常有用。
有一个 spring 启动应用程序,我想在其中放置一个文件到 S3 目标存储桶的文件夹中。 target-bucket/targetsystem-folder/file.csv
每个将从 yml 配置文件中检索的文件的目标系统文件夹名称都不同。
如果文件夹不退出,则必须通过代码创建目标系统文件夹,文件应放在文件夹下
据我所知,S3 bucket中没有文件夹的概念,都是作为对象存储的。
读过一些文档喜欢将文件放在文件夹下,必须给出像 targetsystem-folder/file.csv 和 bucket = target-bucket 这样的 key-expression。 但它不起作用 out.Would 喜欢使用 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>
任何人都可以指导这个问题
之前在做的项目中,我只是使用了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,进一步解释该主题。
There are no "sub-directories" in S3. There are buckets and there are keys within buckets.
You can emulate traditional directories by using prefix searches. For example, you can store the following keys in a bucket:
foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2
你的问题是key-expression
中的SpEL是错误的。只需尝试从常规 Java 代码开始,想象一下您希望如何构建这样一个值。然后你会发现你的表达式中缺少连接操作:
key-expression="headers.targetsystem-folder + '/' + headers.file_name"
另外,请日后提供更多有关错误的信息。在大多数情况下,堆栈跟踪非常有用。