spring-boot - 当存储桶级别没有访问权限时,int-aws:s3-outbound-channel-adapter 或 int-aws:s3-outbound-gateway 不会引发任何错误
问题描述
我在 int-aws:s3-outbound-gateway 和 int-aws:s3-outbound-channel-adapter 都面临一个问题。问题是,假设如果我没有已配置为目标存储桶的存储桶访问权限,适配器应该在控制台中引发运行时错误,但我在控制台中没有收到任何错误,并且文件没有移动到各自的目的地。你能就此提出建议吗
<int-aws:s3-outbound-channel-adapter
id="moverId"
channel="ChannelGateway"
transfer-manager="tf"
bucket-expression="bucketName"
key-expression="headers.file_name"
command="UPLOAD">
<int-aws:request-handler-advice-chain>
<ref bean="retryAdvice" />
</int-aws:request-handler-advice-chain>
</int-aws:s3-outbound-channel-adapter>
解决方案
您不会收到任何错误,因为此类上传是异步操作。
S3MessageHandler
完全基于 AWS S3 TransferManager
。当我们将文件上传到远程存储桶时,它是通过以下操作完成的:
/**
* <p>
* Schedules a new transfer to upload data to Amazon S3. This method is
* non-blocking and returns immediately (i.e. before the upload has
* finished).
* </p>
* <p>
* Use the returned <code>Upload</code> object to query the progress of the
* transfer, add listeners for progress events, and wait for the upload to
* complete.
* </p>
* <p>
* If resources are available, the upload will begin immediately. Otherwise,
* the upload is scheduled and started as soon as resources become
* available.
* </p>
* <p>
* If you are uploading <a href="http://aws.amazon.com/kms/">AWS
* KMS</a>-encrypted objects, you need to specify the correct region of the
* bucket on your client and configure AWS Signature Version 4 for added
* security. For more information on how to do this, see
* http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#
* specify-signature-version
* </p>
*
* @param putObjectRequest
* The request containing all the parameters for the upload.
* @param progressListener
* An optional callback listener to receive the progress of the
* upload.
*
* @return A new <code>Upload</code> object to use to check the state of the
* upload, listen for progress notifications, and otherwise manage
* the upload.
*
* @throws AmazonClientException
* If any errors are encountered in the client while making the
* request or handling the response.
* @throws AmazonServiceException
* If any errors occurred in Amazon S3 while processing the
* request.
*/
public Upload upload(final PutObjectRequest putObjectRequest,
final S3ProgressListener progressListener)
如果此方法请注意第二个参数:S3MessageHandler
为您的用例提供了这样的钩子:
/**
* Specify a {@link S3ProgressListener} for upload and download operations.
* @param s3ProgressListener the {@link S3ProgressListener} to use.
* @see MessageS3ProgressListener
*/
public void setProgressListener(S3ProgressListener s3ProgressListener) {
你需要在那里跟踪progressChanged(ProgressEvent progressEvent)
一个适当的ProgressEventType
.
推荐阅读
- mysql - 使用 date_add 与列作为间隔值并比较 mysql 中的日期
- excel - 动态定义的复选框的 Excel VBA 事件未触发
- google-apps-script - DocumentApp.openById(fileId) 失败
- c++ - 如何让用户在 C++ 中选择一个数字
- parameters - 查询字符串参数中 Swagger 中的错误解析器错误?
- java - 为什么这个查询结果会出现时间
- ios - 是否可以在 iOS 13 中向 UISearchBar 添加语音听写(麦克风图标)按钮?
- c++ - 为什么在按值返回时创建临时对象而不是在将值传递给函数参数时创建临时对象
- reactjs - 如何在 package.json 文件中构建我的 service worker?
- python - 在元素之间的可变数量的空格字符上将列表项拆分为多个项目