### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

Currently, when using localstack S3 to generate a presigned upload that has metadata written into the object, the metadata is not persisted to the object. Resulting in no metadata being returned when `aws s3api head-object` is executed.

### Expected Behavior

As a localstack user
I want localstack S3 to correctly persist the metadata into the s3 object when using a presigned upload
So that I can test if my presign upload feature is working as expected

### 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.yml

    localstack:
        image: ${DEP_PROXY_PREFIX}/localstack/localstack:2.3
        hostname: localstack
        ports:
            - 4566:4566
        environment:
            Services: 's3,sqs,sns'
            AWS_ACCESS_KEY_ID: localstack
            AWS_SECRET_ACCESS_KEY: localstack
            AWS_DEFAULT_REGION: eu-central-1
            EAGER_SERVICE_LOADING: 1
        volumes:
            - localstack:/var/lib/localstack
            - '/var/run/docker.sock:/var/run/docker.sock
```

```bash
docker compose up
```
#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

```typescript
// test.ts
import { HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { uploadFileViaHttp } from './tests/integration/scripts';
import { randomBytes } from 'crypto';

async function runError() {
    const client = new S3Client({
        region: 'eu-central-1',
        endpoint: 'http://localhost:4566',
        forcePathStyle: true
    });
    const buffer = randomBytes(100);

    const initialMetaData = {
        firstid: 'b8066141-3c1a-4c10-96a7-0664aeebe2aa',
        secondid: '800001',
        thirdid: 'b0372e50-f4f3-4ae2-9a44-7b8c70604cf4'
    };
    const putObjectCommand = new PutObjectCommand({
        Bucket: 'my-test-bucket',
        Key: 'test-key.txt',
        ContentLength: buffer.length,
        Metadata: initialMetaData
    });

    const url = await getSignedUrl(client, putObjectCommand);

    // simply uploads the buffer with a PUT request
    await uploadFileViaHttp(url, buffer);

    const headObjectCommand = new HeadObjectCommand({
        Bucket: 'my-test-bucket',
        Key: 'test-key.txt'
    });

    const response = await client.send(headObjectCommand);


    console.log(`Expected Metadata`, initialMetaData);
    console.log('Received Metadata', response.Metadata);
}

runError().then(() => {
    console.log('done');
});
```

```bash
ts-node ./test.ts
```

When this script is run with Localstack 2.3 (f7c3a25c88a7) this works fine.

### Environment

```markdown
- OS: 22.04
- LocalStack: latest (c31daa9ad74a)
```


### Anything else?

Error only occurrs on newer localstack version.

Thank you for the good work on the project! Love it!
import base64
import contextlib
import datetime
import gzip
import hashlib
import io
import json
import logging
import os
import shutil
import tempfile
import time
from importlib.util import find_spec
from io import BytesIO
from operator import itemgetter
from typing import TYPE_CHECKING
from urllib.parse import SplitResult, parse_qs, quote, urlencode, urlparse, urlunsplit
import boto3 as boto3
import pytest
import 
import xmltodict
from boto3.s3.transfer import KB, TransferConfig
from botocore import UNSIGNED
from botocore.auth import SigV4Auth
from botocore.client import Config
from botocore.exceptions import ClientError
from zoneinfo import ZoneInfo
import localstack.config
from localstack import config
from localstack.aws.api.lambda_ import Runtime