0

我正在尝试创建一个骆驼路由来将文件从 FTP 服务器传输到 AWS S3 存储。我写了以下路线

private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception 
{
from("sftp://<<ftp_server_name>>&noop=true&include=<<file_name>>...")
    .process(new Processor(){

        @Override
        public void process(Exchange ex)
        {
            System.out.println("Hello");
        }

       })

     .to("aws-s3://my-dev-bucket ?    
     accessKey=ABC***********&secretKey=12abc********+**********");
}

问题是,这给了我以下例外:

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to  create route route1 at: >>> To[aws-s3://my-dev-bucket?accessKey=ABC*******************&secretKey=123abc******************** <<< in route: Route(route1)[[From[sftp://<<ftp-server>>... because of Failed to resolve endpoint: aws-s3://my-dev-bucket?accessKey=ABC***************&secretKey=123abc************** due to: The request signature we calculated does not match the signature you provided. Check your key and signing method.

然后我尝试以另一种方式做到这一点。即编写这样的方法:

public void boot() throws Exception {
    // create a Main instance
    main = new Main();
    // enable hangup support so you can press ctrl + c to terminate the JVM
    main.enableHangupSupport();
    // bind MyBean into the registery
    main.bind("foo", new MyBean());
    // add routes

    AWSCredentials awsCredentials = new BasicAWSCredentials("ABC*****************", "123abc*************************");
    AmazonS3 client = new AmazonS3Client(awsCredentials);
    //main.bind("client", client);  
    main.addRouteBuilder(new MyRouteBuilder());
    main.run();
}

并使用绑定变量#client 调用。这种方法没有给出任何异常,但是文件传输不起作用。

为了确保我的方法没有问题,我尝试了 aws-sqs 而不是 aws-s3 并且效果很好(文件成功传输到 SQS 队列)

知道为什么会这样吗?骆驼的“aws-s3”连接器是否存在一些基本问题?

4

4 回答 4

2

您是否尝试过使用RAW()函数来像RAW(secretkey or accesskey).

它将帮助您按原样传递您的密钥,而无需编码

于 2015-12-18T11:27:53.037 回答
0

您的密钥中的任何加号都需要将 url 编码为 %2B,在您的情况下**********+***********变为**********%2B***********

于 2014-09-15T23:42:05.390 回答
0

当您使用 URI 配置 Camel 端点时,默认情况下参数值会获取 url 编码。当您想按原样配置密码时,这可能是一个问题。

为此,您可以告诉 Camel 使用原始值,方法是用 RAW(value) 将值括起来。请参阅如何配置端点的更多详细信息,其中也有一个示例。 请参阅骆驼文档

于 2014-11-07T18:40:58.940 回答
0

您的网址应如下所示:

aws-s3:bucketName?accessKey=RAW(XXXX)&secretKey=RAW(XXXX)
于 2017-09-18T10:25:10.627 回答