-
Notifications
You must be signed in to change notification settings - Fork 127
Open
Labels
bugSomething isn't workingSomething isn't workingstorageRelated to the Storage category/pluginsRelated to the Storage category/plugins
Description
Before opening, please confirm:
- I have searched for duplicate or closed issues and discussions.
Language and Async Model
Kotlin
Amplify Categories
Storage
Gradle script dependencies
implementation(libs.bundles.amplify.liveness)
...
[bundles]
amplify-liveness = [
"amplify-liveness",
"amplify-aws-auth-cognito",
"amplify-aws-storage-s3",
]
...
amplify-liveness = { group = "com.amplifyframework.ui", name = "liveness", version.ref = "amplifyLiveness" }
amplify-aws-auth-cognito = { group = "com.amplifyframework", name = "aws-auth-cognito", version.ref = "amplifyAuthCognito" }
amplify-aws-storage-s3 = { group = "com.amplifyframework", name = "aws-storage-s3", version.ref = "amplifyStorageS3" }
...
amplifyLiveness = "1.8.0"
amplifyAuthCognito = "2.30.2"
amplifyStorageS3 = "2.30.2"
Environment information
# Put output below this line
Please include any relevant guides or documentation you're referencing
No response
Describe the bug
I have two imported S3 buckets configured in my Amplify Gen 2 project:
backend.addOutput({
storage: {
aws_region: bucket1.env.region,
bucket_name: bucket1.bucketName,
// optional: `buckets` can be used when setting up more than one existing bucket
buckets: [
{
aws_region: bucket1.env.region,
bucket_name: bucket1.bucketName,
name: bucket1.bucketName,
},
{
aws_region: bucket2.env.region,
bucket_name: bucket2.bucketName,
name: bucket2.bucketName,
},
]
},
});When using the Amplify storage plugin to upload to the first bucket (bucket1), the upload succeeds without any issues. Uploading to the second bucket (bucket2) results in correct file upload to the bucket, however on the frontend side, the result callback is never called. The progress reports are delivered up to 1.0.
StorageUploadFileOptions options = StorageUploadFileOptions.builder()
.contentType("image/jpeg")
.bucket(StorageBucket.fromBucketInfo(new BucketInfo("bucket-2", "us-east-1")))
.build();
Amplify.Storage.uploadFile(StoragePath.fromString(file.getName()), file, options,
progress -> Log.e(TAG, "onProgressChanged: " + progress.getFractionCompleted()),
result -> {
Log.i(TAG, "Successfully uploaded: " + result.getPath());
String url = PHOTO_BUCKET_BASEURL + "/" + result.getPath();
Log.e(TAG, "URL: " + url);
uploadImage(url);
},
error -> {
Log.e(TAG, "Upload failed", error);
Constant.dismissProgress();
Toast.makeText(EditProfileActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
});I do see the progress reports going all the way up to 1, but the logs die there:
2025-11-02 14:24:07.067 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 0.9913283253523364
2025-11-02 14:24:07.068 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 0.9959762158727277
2025-11-02 14:24:07.069 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.000624106393119
2025-11-02 14:24:07.070 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.0013781403898963
2025-11-02 14:24:07.072 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.0014955858656922
2025-11-02 14:24:07.622 22613-22819 WM-WorkerWrapper com.xxxxxx.xxxxxx I Worker result SUCCESS for Work [ id=b9d435c9-9f8b-4308-a111-df33ed264932, tags={ com.amplifyframework.storage.s3.transfer.worker.RouterWorker, awsS3StoragePlugin, 12, UPLOAD } ]
2025-11-02 14:24:07.629 22613-22819 ConnectivityManager com.xxxxxx.xxxxxx D StackLog: [android.net.ConnectivityManager.unregisterNetworkCallback(ConnectivityManager.java:5571)] [androidx.work.impl.utils.NetworkApi21.unregisterNetworkCallbackCompat(NetworkApi21.kt:31)] [androidx.work.impl.constraints.trackers.NetworkStateTracker24.stopTracking(NetworkStateTracker.kt:153)] [androidx.work.impl.constraints.trackers.ConstraintTracker.removeListener(ConstraintTracker.kt:72)] [androidx.work.impl.constraints.controllers.ConstraintController$track$1$1.invoke(ContraintControllers.kt:56)] [androidx.work.impl.constraints.controllers.ConstraintController$track$1$1.invoke(ContraintControllers.kt:55)] [kotlinx.coroutines.channels.ProduceKt.awaitClose(Produce.kt:69)] [kotlinx.coroutines.channels.ProduceKt$awaitClose$1.invokeSuspend(Unknown Source:13)] [kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)] [kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:98)] [androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)] [java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)] [java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)] [java.lang.Thread.run(Thread.java:1119)]
2025-11-02 14:24:07.633 22613-22862 amplify:aw...TransferDB com.xxxxxx.xxxxxx I update state for 12 to COMPLETED
2025-11-02 14:24:07.636 22613-22862 amplify:aw...erObserver com.xxxxxx.xxxxxx D remove observer for 12
Please note that, as mentioned before, the file is uploaded correctly. The only issue is that the result callback is not called.
Reproduction steps (if applicable)
No response
Code Snippet
StorageUploadFileOptions options = StorageUploadFileOptions.builder()
.contentType("image/jpeg")
.bucket(StorageBucket.fromBucketInfo(new BucketInfo("bucket-2", "us-east-1")))
.build();
Amplify.Storage.uploadFile(StoragePath.fromString(file.getName()), file, options,
progress -> Log.e(TAG, "onProgressChanged: " + progress.getFractionCompleted()),
result -> {
Log.i(TAG, "Successfully uploaded: " + result.getPath());
String url = PHOTO_BUCKET_BASEURL + "/" + result.getPath();
Log.e(TAG, "URL: " + url);
uploadImage(url);
},
error -> {
Log.e(TAG, "Upload failed", error);
Constant.dismissProgress();
Toast.makeText(EditProfileActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
});Log output
2025-11-02 14:24:07.067 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 0.9913283253523364
2025-11-02 14:24:07.068 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 0.9959762158727277
2025-11-02 14:24:07.069 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.000624106393119
2025-11-02 14:24:07.070 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.0013781403898963
2025-11-02 14:24:07.072 22613-22613 UploadActivity com.xxxxxx.xxxxxx E onProgressChanged: 1.0014955858656922
2025-11-02 14:24:07.622 22613-22819 WM-WorkerWrapper com.xxxxxx.xxxxxx I Worker result SUCCESS for Work [ id=b9d435c9-9f8b-4308-a111-df33ed264932, tags={ com.amplifyframework.storage.s3.transfer.worker.RouterWorker, awsS3StoragePlugin, 12, UPLOAD } ]
2025-11-02 14:24:07.629 22613-22819 ConnectivityManager com.xxxxxx.xxxxxx D StackLog: [android.net.ConnectivityManager.unregisterNetworkCallback(ConnectivityManager.java:5571)] [androidx.work.impl.utils.NetworkApi21.unregisterNetworkCallbackCompat(NetworkApi21.kt:31)] [androidx.work.impl.constraints.trackers.NetworkStateTracker24.stopTracking(NetworkStateTracker.kt:153)] [androidx.work.impl.constraints.trackers.ConstraintTracker.removeListener(ConstraintTracker.kt:72)] [androidx.work.impl.constraints.controllers.ConstraintController$track$1$1.invoke(ContraintControllers.kt:56)] [androidx.work.impl.constraints.controllers.ConstraintController$track$1$1.invoke(ContraintControllers.kt:55)] [kotlinx.coroutines.channels.ProduceKt.awaitClose(Produce.kt:69)] [kotlinx.coroutines.channels.ProduceKt$awaitClose$1.invokeSuspend(Unknown Source:13)] [kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)] [kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:98)] [androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)] [java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)] [java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)] [java.lang.Thread.run(Thread.java:1119)]
2025-11-02 14:24:07.633 22613-22862 amplify:aw...TransferDB com.xxxxxx.xxxxxx I update state for 12 to COMPLETED
2025-11-02 14:24:07.636 22613-22862 amplify:aw...erObserver com.xxxxxx.xxxxxx D remove observer for 12
Configuration File
...
"storage": {
"aws_region": "us-east-1",
"bucket_name": "bucket-1",
"buckets": [
{
"aws_region": "us-east-1",
"bucket_name": "bucket-1",
"name": "bucket-1"
},
{
"aws_region": "us-east-1",
"bucket_name": "bucket-2",
"name": "bucket-2"
}
]
}
...GraphQL Schema
// Put your schema below this line
Additional information and screenshots
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingstorageRelated to the Storage category/pluginsRelated to the Storage category/plugins