【问题标题】:Placing file inside folder of S3 bucket将文件放在 S3 存储桶的文件夹中
【发布时间】:2018-10-03 09:50:52
【问题描述】:

有一个 spring boot 应用程序,我想在其中放置一个文件到 S3 目标存储桶的文件夹中。目标桶/目标系统文件夹/file.csv

从 yml 配置文件中检索的每个文件的目标系统文件夹名称都不同。

如果文件夹不退出,则必须通过代码创建目标系统文件夹,文件应放在文件夹下

据我所知,S3 存储桶中没有文件夹的概念,都是作为对象存储的。

已经阅读了一些文件,比如将文件放在文件夹下,必须给出 key-expression,如 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>

谁能指导一下这个问题

【问题讨论】:

    标签: spring spring-boot spring-integration spring-integration-sftp spring-integration-aws


    【解决方案1】:

    您的问题是key-expression 中的SpEL 错误。只需尝试从常规 Java 代码开始,想象一下您希望如何构建这样的值。然后你会发现你的表达式中缺少连接操作:

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

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

    【讨论】:

    • 它有效。如建议的那样,将在以后的问题中提供堆栈跟踪。
    【解决方案2】:

    在我之前工作的项目中,我只是使用了提供的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
    

    【讨论】:

    • 感谢您的回复。想知道这可以使用 spring -integration -aws 本身使用出站适配器而不直接使用 aws-sdk 来实现
    • 很抱歉没有理解您的问题。希望您能尽快找到答案。
    • 这个答案肯定显示了 Spring Integration 在其 S3MessageHandler 中所做的事情,但没有为关于 Spring Integration AWS 扩展的原始请求提供任何线索。请看我的回答。
    • 是的,我误解了他的问题,因为我之前没有使用过spring-integration-aws。我对此感到非常抱歉。感谢您的回答,因为我将来可能也需要它。 +1
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2018-04-19
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多