### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

I'm implementing the second example, using the transferManager described here:

https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_Scenario_UploadStream_section.html

```
        Long sizeOnS3;
        var key = dataSource.getObjectKey();

        S3TransferManager transferManager = S3TransferManager.builder()
                .s3Client(s3AsyncClient)
                .build();

        BlockingInputStreamAsyncRequestBody body =
                AsyncRequestBody.forBlockingInputStream(null);

        Upload upload = transferManager.upload(builder -> builder
                .requestBody(body)
                .putObjectRequest(req -> req.bucket(bucketName).key(key))
                .build());

        body.writeInputStream(dataSource.getDataStream());

        try {
            upload.completionFuture().get();
            sizeOnS3 = s3Client.headObject(b -> b.bucket(bucketName).key(dataSource.getObjectKey())).contentLength();
        } catch (Exception e) {
            log.error("Error while uploading file to S3", e);
            throw new RuntimeException(e);
        } finally {
            IOUtils.closeQuietly(dataSource.getDataStream());
        }
```

with the S3AsyncClient configure as such:

```
    @Bean
    public S3AsyncClient amazonAsyncS3Client(final Region region,
                                        final AwsCredentialsProvider awsCredentialsProvider,
                                        @Value("${application.aws.s3.uri}") final String maybeS3Uri) throws
            URISyntaxException {

        var s3ClientBuilder = S3AsyncClient.crtBuilder()
                .forcePathStyle(true)
                .region(region)
                .credentialsProvider(awsCredentialsProvider);

        if (StringUtils.isNotBlank(maybeS3Uri)) {
            s3ClientBuilder.endpointOverride(new URI(maybeS3Uri));
        }

        return s3ClientBuilder.build();
    }
```

The upload is successful but some extra data seems to be added before and after the original content:

original content (csv fetched from an API):

`MyData`

Content that I get if I fetch it again:

```
503
MyData

0
x-amz-checksum-crc32:e4f9zQ==
```

Deploying on AWS this extra content doesn't appear so it is my assumption that it is coming from localstack

### Expected Behavior

No extra information is added to the S3 file content other than the original data

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

docker-compose

  localstack:
    image: localstack/localstack:3.0.2
    ports:
      - "4566:4566" # Default port forward
    healthcheck:
      test: [ "CMD", "awslocal", "s3api", "wait", "bucket-exists", "--bucket", "stored-files" ]
      interval: 10s
      timeout: 5s
      retries: 20
    environment:
      - SERVICES=s3,sts
      - DEBUG=1
      - LAMBDA_REMOTE_DOCKER=0
      - DATA_DIR=/tmp/localstack/data
      - DEFAULT_REGION=eu-west-1
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - '/var/run/docker.sock:/var/run/docker.sock'
      - "./data/localstack/init.sh:/etc/localstack/init/ready.d/init.sh"


### Environment

```markdown
- OS:macOs 14.1.2
- LocalStack: 3.0.2
```


### Anything else?

_No response_
self, context: RequestContext, bucket: BucketName, expected_bucket_owner: AccountId = None
    ) -> GetBucketLocationOutput:
        """
        When implementing the ASF provider, this operation is implemented because:
        - The spec defines a root element GetBucketLocationOutput containing a LocationConstraint member, where
          S3 actually just returns the LocationConstraint on the root level (only operation so far that we know of).
        - We circumvent the root level element here by patching the spec such that this operation returns a
          single "payload" (the XML body response), which causes the serializer to directly take the payload element.
        - The above "hack" causes the fix in the serializer to not be picked up here as we're passing the XML body as
          the payload, which is why we need to manually do this here by manipulating the string.
        Botocore implements this hack for parsing the response in `botocore.handlers.py#parse_get_bucket_location`
        """
        store, s3_bucket = self._get_cross_account_bucket(context, bucket)
        location_constraint = (
            '<?xml version="1.0" encoding="UTF-8"?>\n'
            '<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">{{location}}</LocationConstraint>'
        )
        location = s3_bucket.bucket_region if s3_bucket.bucket_region != "us-east-1" else ""
        location_constraint = location_constraint.replace("{{location}}", location)
        response = GetBucketLocationOutput(LocationConstraint=location_constraint)
        return response
    @handler("PutObject", expand=False)
    def put_object(