0

In a Symfony project, I have implemented the Oneup/UploaderBundle with the Oneup/FlysystemBundle to upload files to a S3 compatible storage.
I tried to upload a 1GB file, and it took about 3 min using the Aws\S3\S3Client adapter (https://flysystem.thephpleague.com/docs/adapter/aws-s3-v3/), which is way too slow.

oneup_uploader.yaml :

object_scaleway_sync:
            frontend: dropzone
            storage:
                type: flysystem
                filesystem: oneup_flysystem.object_scaleway_sync_filesystem

oneup_flysystem.yaml :

oneup_flysystem:
    adapters:
        xxx_fr_sync.flysystem_adapter:
            awss3v3:
                client: xxx_fr.sync_s3_client
                bucket: 'xxxtest'
                prefix: ''

    filesystems:
        object_scaleway_sync:
            adapter: xxx_fr_sync.flysystem_adapter

After that, I tried to upload the same file using directly the S3Client in a controller, and it took about 98 seconds, which is faster, but still too slow for 1GB.

MainController.php :

$client = new S3S3Client([
   'region'            => 'fr-par',
   'endpoint'          => 'https://s3.fr-par.scw.cloud',
   'version'           => 'latest',
   'credentials'       => [
         'key'               => 'publickey',
         'secret'            => 'secretkey'
          ]
]);
$pathToFile = $this->getParameter('kernel.project_dir') . '/public/big.bin';
$resource = \fopen($pathToFile, 'r');
$result = $client->putObject([
        'Bucket' => 'xxxtest',
        'Key'    => 'big.bin',
        'Body' => $resource
]);
return new Response("Ok");

Strangely, this simple plain php script below took 28 seconds to upload the same file :

$s3 = new Aws\S3\S3Client([
    'region'  => 'fr-par',
    'version' => 'latest',
    'endpoint' => 'https://s3.fr-par.scw.cloud',
    'credentials' => [
        'key'    => "publickey",
        'secret' => "secretkey",
    ]
]);

$result = $s3->putObject([
    'Bucket' => 'xxxtest',
    'Key'    => 'big.bin',
    'SourceFile' => './big.bin'
]);

Why is this script faster than the Symfony method ? Is there a way to optimize the upload speed ?

I tried using the async S3 Simple Client (https://async-aws.com/integration/simple-s3.html) but it returned the error "Could not contact remote server" at the end of the upload.
Same error with the async S3Client (https://async-aws.com/clients/s3.html).

heryforce
  • 1
  • 3
  • Did you checked that your internet speed was constant and at the same upload speed for each test ? – ThomasL Feb 16 '23 at 14:08
  • Yes, my internet speed was always the same. – heryforce Feb 17 '23 at 10:06
  • Please trim your code to make it easier to find your problem. Follow these guidelines to create a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example). – Community Feb 17 '23 at 10:35

0 Answers0