

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Penggunaan lanjutan
<a name="advanced-usage"></a>

Bagian ini mencakup pola dan teknik penggunaan lanjutan untuk S3 Transfer Manager.

## Unggahan multipart
<a name="multipart-uploads"></a>

S3 Transfer Manager secara otomatis menggunakan unggahan multipart untuk file besar. Anda dapat menyesuaikan perilaku ini dengan opsi konfigurasi.

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

## Unduhan multibagian
<a name="multipart-downloads"></a>

Anda dapat menyesuaikan perilaku unduhan multibagian.

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

Untuk informasi selengkapnya tentang anggota `AbstractMultipartDownloader` kelas lainnya, lihat dokumentasi API{{<add link>}}.

## Filter khusus
<a name="custom-filters"></a>

Anda dapat menggunakan fungsi filter untuk mengunggah atau mengunduh file secara selektif untuk operasi direktori.

### Unggah filter direktori
<a name="custom-filter-upload-dir"></a>

Untuk informasi selengkapnya tentang informasi parameter, lihat [opsi filter callable](directory-operations.md#upload-directory-config-callables) dari `uploadDirectory` metode ini.

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

### Unduh filter direktori
<a name="custom-filter-download-dir"></a>

Untuk informasi selengkapnya tentang informasi parameter, lihat [opsi filter callable](directory-operations.md#download-dir-callable-options) dari `downloadDirectory` metode ini.

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

## Panggilan balik pra-permintaan
<a name="pre-request-callbacks"></a>

Anda dapat mengubah parameter permintaan untuk setiap file menggunakan callback pra-permintaan. Untuk informasi selengkapnya tentang parameter, lihat berikut ini:
+ [put\_object\_request\_callaback opsi callable](directory-operations.md#upload-directory-config-callables) dari metode `uploadDirectory`
+ [download\_object\_request\_modifier opsi callable](directory-operations.md#download-dir-callable-options) dari metode `downloadDirectory`

**Example dari panggilan balik pra-permintaan untuk metode `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();
```