如何处理s3对象名称中的Plus+符号?

问题描述

我是骆驼路线的新手,并且坚持用例,我必须将文件上传到s3,该文件的名称中将包含加号symbol(+),对此我们无能为力。我尝试使用谷歌搜索来解决此问题,但未找到任何解决方案,我发现我必须对我的s3 url进行编码,该URL可以处理plus(+)符号,但无法获取方法? 还经历了FineUploader with S3 how to specify object name on S3https://github.com/aws/aws-sdk-java/issues/1946AWS: how to fix S3 event replacing space with '+' sign in object key names in json之类的解决方案,但我没有从所有这些中找到提示。

这里是示例-

from("ftp-file-location").toD("S3-location/file+name.xml")  

问题是,如果我以相同的方式使用它,则会出现如下异常情况

2020-08-28 22:59:27.943  WARN 14268 --- [sVpiIngestRoute] o.a.camel.component.seda.SedaConsumer    : Error processing exchange. Exchange[]. Caused by: [com.amazonaws.services.s3.model.AmazonS3Exception - The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: C4CE2CAE8988D1C0; S3 Extended Request ID: aLzhh+0HZDCYjQrask2AqkwvaIckpAwj1ZXW1QCOZNPb02QJA9pruje+6BhgwJDATizyZqDYbvA=)]

com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: C4CE2CAE8988D1C0; S3 Extended Request ID: aLzhh+0HZDCYjQrask2AqkwvaIckpAwj1ZXW1QCOZNPb02QJA9pruje+6BhgwJDATizyZqDYbvA=)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1640)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4365)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4312)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1755)
    at org.apache.camel.component.aws.s3.S3Producer.processSingleOp(S3Producer.java:281)
    at org.apache.camel.component.aws.s3.S3Producer.process(S3Producer.java:90)
    at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:67)
    at org.apache.camel.processor.SendDynamicProcessor.lambda$process$0(SendDynamicProcessor.java:166)
    at org.apache.camel.impl.engine.DefaultProducerCache.doInAsyncProducer(DefaultProducerCache.java:298)
    at org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:151)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.run(RedeliveryErrorHandler.java:476)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:185)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:87)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:228)
    at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:266)
    at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:180)
    at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:125)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

但是,如果我从文件名中删除加号(+),效果很好。

您能帮我吗??? 预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...