

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation avancée
<a name="advanced-usage"></a>

Cette section couvre les modèles et techniques d'utilisation avancés du gestionnaire de transfert S3.

## Chargements partitionnés
<a name="multipart-uploads"></a>

S3 Transfer Manager utilise automatiquement des téléchargements partitionnés pour les fichiers volumineux. Vous pouvez personnaliser ce comportement à l'aide des options de configuration.

```
<?php

use Aws\S3\S3Transfer\Models\UploadRequest;
use Aws\S3\S3Transfer\S3TransferManager;

require __DIR__ . '/../vendor/autoload.php';

$transferManager = new S3TransferManager(null, []);

$uploadPromise = $transferManager->upload(
    new UploadRequest(
        '/path/to/large/file.mp4',
        [
            'Bucket' => 'amzn-s3-demo-bucket',
            'Key'    => 'videos/large-file.mp4',
        ],
        [
            // Use multipart upload for files larger than 100MB.
            'multipart_upload_threshold_bytes' => 100 * 1024 * 1024,

            // Use 25MB parts for multipart uploads.
            'target_part_size_bytes'           => 25 * 1024 * 1024,
        ]
    )
);
$uploadPromise->wait();
```

## Téléchargements en plusieurs parties
<a name="multipart-downloads"></a>

Vous pouvez personnaliser le comportement de téléchargement en plusieurs parties.

```
<?php

use Aws\S3\S3Transfer\AbstractMultipartDownloader;
use Aws\S3\S3Transfer\Models\DownloadRequest;
use Aws\S3\S3Transfer\S3TransferManager;

require __DIR__ . '/../vendor/autoload.php';

$transferManager = new S3TransferManager(null, []);

$downloadPromise = $transferManager->download(
    new DownloadRequest(
        's3://amzn-s3-demo-bucket/large-file.mp4',
        [],
        [
            // Use 25MB parts for multipart downloads.
            'target_part_size_bytes'  => 25 * 1024 * 1024,

            // Use ranged-based download instead of part-based.
            'multipart_download_type' => AbstractMultipartDownloader::RANGED_GET_MULTIPART_DOWNLOADER,
        ]
    )
);
$downloadPromise->wait();
```

Pour plus d'informations sur les autres membres de la `AbstractMultipartDownloader` classe, consultez la documentation de l'API{{<add link>}}.

## Filtres personnalisés
<a name="custom-filters"></a>

Vous pouvez utiliser les fonctions de filtrage pour charger ou télécharger des fichiers de manière sélective pour les opérations de répertoire.

### Filtre de répertoire de téléchargement
<a name="custom-filter-upload-dir"></a>

Pour plus d'informations sur les informations sur les paramètres, consultez l'[option de filtre appelable](directory-operations.md#upload-directory-config-callables) de la `uploadDirectory` méthode.

```
<?php

use Aws\S3\S3Transfer\Models\UploadDirectoryRequest;
use Aws\S3\S3Transfer\S3TransferManager;

require __DIR__ . '/../vendor/autoload.php';

$transferManager = new S3TransferManager(null, []);

// Upload files modified in the last 24 hours.
$uploadDirPromise = $transferManager->uploadDirectory(
    new UploadDirectoryRequest(
        '/path/to/directory',
        'amzn-s3-demo-bucket',
        [],
        [
            'filter' => function ($file) {
                $modTime = filemtime($file);
                return (time() - $modTime) < 86400; // 24 hours
            },
        ]
    )
);
$uploadDirPromise->wait();
```

### Filtre de répertoire de téléchargement
<a name="custom-filter-download-dir"></a>

Pour plus d'informations sur les informations sur les paramètres, consultez l'[option de filtre appelable](directory-operations.md#download-dir-callable-options) de la `downloadDirectory` méthode.

```
<?php

use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest;
use Aws\S3\S3Transfer\S3TransferManager;

require __DIR__ . '/../vendor/autoload.php';

$transferManager = new S3TransferManager(null, []);

// Download files with a specific prefix.
$downloadDirPromise = $transferManager->downloadDirectory(
    new DownloadDirectoryRequest(
        'amzn-s3-demo-bucket',
        '/path/to/directory',
        [],
        [
            'filter' => function ($key) {
                return strpos($key, 'reports/2023/') === 0;
            },
        ]
    )
);
$downloadDirPromise->wait();
```

## Rappels préalables à la demande
<a name="pre-request-callbacks"></a>

Vous pouvez modifier les paramètres de demande pour chaque fichier à l'aide de rappels préalables à la demande. Pour plus d'informations sur les paramètres, consultez les rubriques suivantes :
+ [option appelable put\_object\_request\_callaback](directory-operations.md#upload-directory-config-callables) de la méthode `uploadDirectory`
+ [option appelable download\_object\_request\_modifier](directory-operations.md#download-dir-callable-options) de la méthode `downloadDirectory`

**Example d'un rappel de pré-demande pour la méthode `uploadDirectory`**  

```
<?php

use Aws\S3\S3Transfer\Models\UploadDirectoryRequest;
use Aws\S3\S3Transfer\S3TransferManager;

require __DIR__ . '/../vendor/autoload.php';

$transferManager = new S3TransferManager(null, []);

// Set custom metadata for each uploaded file.
$uploadDirPromise = $transferManager->uploadDirectory(
    new UploadDirectoryRequest(
        '/path/to/directory',
        'amzn-s3-demo-bucket',
        [],
        [
            'upload_object_request_modifier' => function ($args) {
                $extension = pathinfo($args['Key'], PATHINFO_EXTENSION);

                switch ($extension) {
                    case 'jpg':
                    case 'jpeg':
                        $args['ContentType'] = 'image/jpeg';
                        break;
                    case 'png':
                        $args['ContentType'] = 'image/png';
                        break;
                    case 'pdf':
                        $args['ContentType'] = 'application/pdf';
                        break;
                }

                $args['Metadata'] = [
                    'uploaded_at' => date('Y-m-d H:i:s'),
                ];
            },
        ]
    )
);
$uploadDirPromise->wait();
```