Skip to content

Client error for videos over 5gb when using AWSS3TransferUtility.s3TransferUtility #5525

Open
@nastasiupta

Description

@nastasiupta

Describe the bug
I receive client error when uploading big files (when AWS decides to do chunk uploads). Works as expected for videos under 5 gb.

To Reproduce
Setup part:

let region = AWSRegionType.regionTypeForString(regionString: configuration.region)
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: configuration.pk, secretKey: configuration.sk)
let serviceConfiguration = AWSServiceConfiguration(region: region, credentialsProvider: credentialsProvider)!
AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration

let transferUtilityConfiguration = AWSS3TransferUtilityConfiguration()
transferUtilityConfiguration.isAccelerateModeEnabled = configuration.useAccelerateEndpoint
transferUtilityConfiguration.retryLimit = 5
transferUtilityConfiguration.bucket = configuration.bucket
AWSS3TransferUtility.register(with: serviceConfiguration,
                              transferUtilityConfiguration: transferUtilityConfiguration,
                              forKey: user.id)

Observed Behavior
For small videos everything works as expected, for big files I get an error from the SDK as follows:
Error Domain=com.amazonaws.AWSS3TransferUtilityErrorDomain Code=2 "Client Error" UserInfo={x-amz-id-2=Ui/Ja8YEywiHkUvZVmacrGHyiXqOkp//NvZNDcIdH9TPEEeMdv9//eKguUqeIUu2T06OM15RWKE=, Server=AmazonS3, Connection=keep-alive, NSLocalizedFailureReason=bad request, Transfer-Encoding=Identity, Content-Type=application/xml, HTTPStatusCode=400, X-Cache=Error from cloudfront, x-amz-request-id=3Z73ES3DZX1PC98B, X-Amz-Cf-Id=xlh64ukM7v6EwQSnkSTCs4ywr3Z_yMVSENCeHI-DNO_aHxXIIWojYw==, Date=Wed, 14 May 2025 14:37:36 GMT, X-Amz-Cf-Pop=OTP50-P1, Via=1.1 3611820b1e077d50b36d6d931cabca5a.cloudfront.net (CloudFront), NSLocalizedDescription=Client Error}

Environment(please complete the following information):

  • SDK Version: 2.40.2
  • Dependency Manager: SPM
  • Swift Version : 5
  • Xcode Version: 16.3

Device Information (please complete the following information):

  • Device: any device
  • iOS Version: 17/18

Logs

Please logs in the code block below. (See: Logs Guidance)

Log Messages when fails Value of timeoutIntervalForResource is 3000 Using virtual-hosted-style access because bucket is compliant Using virtual-hosted-style access because bucket is compliant AWSS4 PresignedURL Canonical request: [PUT /nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143723Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost content-type:quicktime/video host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143723Z
20250514/us-east-1/s3/aws4_request
ac97f2f34f3a4f4ba11240ed84c9ec60460f8c7f25d81eca3f9ae5124cbc8560]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143723Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=b5fcfe310968407797e46659cfb0a7840a3263ce2028f80732ac60182af7083a]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
Thread:<NSThread: 0x1182be080>{number = 18, name = (null)}: didCompleteWithError called for task 1
Received a 500, 503 or 400 error. Response Data is []
Retry count is below limit and error is retriable.
Removed object from key 1
Value of timeoutIntervalForResource is 3000
Using virtual-hosted-style access because bucket is compliant
Using virtual-hosted-style access because bucket is compliant
AWSS4 PresignedURL Canonical request: [PUT
/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143725Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost
content-type:quicktime/video
host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143725Z
20250514/us-east-1/s3/aws4_request
61afdf8bec1fec57643c5687dd9d8ce4a0655bb0529f5d215b96ac85aabacdab]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143725Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=00dc1ff8593e686ff7938e5a1f7040b2325c65956957f34adc79d6ef112e26a5]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
didSendBodyData called for task 2
Thread:<NSThread: 0x107f4a530>{number = 22, name = (null)}: didCompleteWithError called for task 2
Received a 500, 503 or 400 error. Response Data is []
Retry count is below limit and error is retriable.
Removed object from key 2
Value of timeoutIntervalForResource is 3000
Using virtual-hosted-style access because bucket is compliant
Using virtual-hosted-style access because bucket is compliant
AWSS4 PresignedURL Canonical request: [PUT
/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143728Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost
content-type:quicktime/video
host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143728Z
20250514/us-east-1/s3/aws4_request
cdd87f398c897d1f68fc96efa3ed8e32912e2afd58f41ffada0c48bc0a4ac004]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143728Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=3f3f483247938c188917f541a4de63e8384b5e1f26a78aa28c565902b92f4873]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
didSendBodyData called for task 3
Thread:<NSThread: 0x12619da90>{number = 25, name = (null)}: didCompleteWithError called for task 3
Received a 500, 503 or 400 error. Response Data is []
Retry count is below limit and error is retriable.
Removed object from key 3
Value of timeoutIntervalForResource is 3000
Using virtual-hosted-style access because bucket is compliant
Using virtual-hosted-style access because bucket is compliant
AWSS4 PresignedURL Canonical request: [PUT
/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143730Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost
content-type:quicktime/video
host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143730Z
20250514/us-east-1/s3/aws4_request
707fbc33807eba2f02db345a6b51504b963a237a045e1014a9af24093b9dd06d]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143730Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=3b9c5c0afe174c5d17aabaf495dd27b7e1c37aa300ee63a4c5ac6d9999beab3a]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
didSendBodyData called for task 4
Thread:<NSThread: 0x12619da90>{number = 25, name = (null)}: didCompleteWithError called for task 4
Received a 500, 503 or 400 error. Response Data is []
Retry count is below limit and error is retriable.
Removed object from key 4
Value of timeoutIntervalForResource is 3000
Using virtual-hosted-style access because bucket is compliant
Using virtual-hosted-style access because bucket is compliant
AWSS4 PresignedURL Canonical request: [PUT
/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143732Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost
content-type:quicktime/video
host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143732Z
20250514/us-east-1/s3/aws4_request
66472fe30a19691bab60bce10c1e104c3dd6d220989df236effd9369a3938179]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143732Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=4cd3acefb2cdd6d769d92aed722c25bde55fdea6afa06b32c2e386efe1fd8738]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
didSendBodyData called for task 5
Thread:<NSThread: 0x12619da90>{number = 25, name = (null)}: didCompleteWithError called for task 5
Received a 500, 503 or 400 error. Response Data is []
Retry count is below limit and error is retriable.
Removed object from key 5
Value of timeoutIntervalForResource is 3000
Using virtual-hosted-style access because bucket is compliant
Using virtual-hosted-style access because bucket is compliant
AWSS4 PresignedURL Canonical request: [PUT
/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143735Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost
content-type:quicktime/video
host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T143735Z
20250514/us-east-1/s3/aws4_request
4246e3d297841c4c0eb2eeda605277d57c9c0cddc222926dd4120858ff285e54]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/E4D39329-91F1-4A75-8F03-FEFAB102019B.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T143735Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=fc26885941850b68f1afd75a23df78f15026c68bc613e8aad16a2d389963c9ec]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6
didSendBodyData called for task 6

Log Messages when works as expected Value of timeoutIntervalForResource is 3000 Using virtual-hosted-style access because bucket is compliant Using virtual-hosted-style access because bucket is compliant AWSS4 PresignedURL Canonical request: [PUT /nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/956B914C-453C-40FD-813B-F0B596BE6AAB.mov X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T144114Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost content-type:quicktime/video host:beta-upload-at.s3-accelerate.amazonaws.com

content-type;host
UNSIGNED-PAYLOAD]
AWS4 PresignedURL String to Sign: [AWS4-HMAC-SHA256
20250514T144114Z
20250514/us-east-1/s3/aws4_request
b502cd07b4032ac5c9ec8b5a574daff98e87932be58945f9b4e2184cde089c70]
AWS4 PresignedURL: [https://beta-upload-at.s3-accelerate.amazonaws.com/nb-2BSxb9jeBXCv7ee6dRUXTbXwDD1rB2dh9h0rqrSi6A/956B914C-453C-40FD-813B-F0B596BE6AAB.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6OHPFH6EGST5HX5P%2F20250514%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250514T144114Z&X-Amz-Expires=2999&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=ecf2c7c52d25aaaffec0821eddf1a99bf19defa1007d71b4db24760640299a72]
Request headers:
{
"Content-Type" = "quicktime/video";
"User-Agent" = "aws-sdk-iOS/2.40.2 iOS/18.5 en_US@rg=rozzzz transfer-utility";
}
Setting taskIdentifier to 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
didSendBodyData called for task 1
Thread:<NSThread: 0x11a28c0a0>{number = 16, name = (null)}: didCompleteWithError called for task 1

Note 1: I looked into #5443 but is not solving my issue, I use let region = AWSRegionType.regionTypeForString(regionString: adtConfiguration.region), but I tried aws_regionTypeValue() as well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpending-triageIssue is pending triages3Issues related to S3

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions