

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo avanzato
<a name="advanced-usage"></a>

Questa sezione descrive i modelli e le tecniche di utilizzo avanzati per S3 Transfer Manager.

## Caricamenti in più parti
<a name="multipart-uploads"></a>

S3 Transfer Manager utilizza automaticamente caricamenti multiparte per file di grandi dimensioni. È possibile personalizzare questo comportamento con le opzioni di configurazione.

```
<?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();
```

## Download in più parti
<a name="multipart-downloads"></a>

È possibile personalizzare il comportamento di download in più parti.

```
<?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();
```

Per ulteriori informazioni sugli altri membri della `AbstractMultipartDownloader` classe, consulta la documentazione {{<add link>}} dell'API.

## Filtri personalizzati
<a name="custom-filters"></a>

È possibile utilizzare le funzioni di filtro per caricare o scaricare selettivamente i file per le operazioni sulle directory.

### Carica il filtro della directory
<a name="custom-filter-upload-dir"></a>

Per ulteriori informazioni sulle informazioni sui parametri, vedete l'[opzione filter callable](directory-operations.md#upload-directory-config-callables) del `uploadDirectory` metodo.

```
<?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();
```

### Scarica il filtro della directory
<a name="custom-filter-download-dir"></a>

Per ulteriori informazioni sulle informazioni sui parametri, vedete l'[opzione filter callable](directory-operations.md#download-dir-callable-options) del `downloadDirectory` metodo.

```
<?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();
```

## Richieste di richiamate preliminari
<a name="pre-request-callbacks"></a>

È possibile modificare i parametri di richiesta per ogni file utilizzando i callback di pre-richiesta. Per ulteriori informazioni sui parametri, consulta quanto segue:
+ [put\_object\_request\_callaback, opzione richiamabile](directory-operations.md#upload-directory-config-callables) del metodo `uploadDirectory`
+ [opzione richiamabile download\_object\_request\_modifier](directory-operations.md#download-dir-callable-options) del metodo `downloadDirectory`

**Example di un callback pre-richiesta per il metodo `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();
```