Operações de diretório - AWS SDK para PHP

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Operações de diretório

O S3 Transfer Manager pode lidar com transferências de diretórios inteiros.

Diretório de upload

O S3 Transfer Manager pode carregar um diretório inteiro em um bucket do S3. <Are the key values the filenames when uploaded?>

<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, [ 'default_region' => 'us-west-2' ]); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/local/directory', 'amzn-s3-demo-bucket', [ // Additional `putObject` parameters that apply to all files. 'ACL' => 'public-read', 'CacheControl' => 'max-age=3600', ], [ // Configuration options. 'recursive' => true, 'follow_symbolic_links' => false, 's3_prefix' => 'uploads/2023/', 's3_delimiter' => '/', 'track_progress' => true, 'filter' => function ($file) { // Upload only .jpg files. return pathinfo($file, PATHINFO_EXTENSION) === 'jpg'; }, 'upload_object_request_modifier' => function ($args) { // Customize request arguments for each file. $args['ContentType'] = 'image/jpeg'; }, ] ) ); // Wait for the upload process to complete. $result = $uploadDirPromise->wait(); $uploaded = $result->getObjectsUploaded(); $failed = $result->getObjectsFailed(); echo "Uploaded {$uploaded} files. Failed: {$failed}\n";

Parâmetros do método uploadDirectory

O uploadDirectory método aceita uma instância de UploadDirectoryRequest <add link> como argumento.

Parâmetros do UploadDirectoryRequest

Parâmetro Tipo Obrigatório Descrição

$sourceDirectory

string

Sim

Caminho do diretório local a ser carregado.

$targetBucket

string

Sim

Nome do bucket S3 de destino.

$uploadRequestArgs

array

Não

Parâmetros adicionais de solicitação de objeto de upload para todos os arquivos.

$config

array

Não

Opções de configuração para o upload do diretório. Para obter mais informações sobre as opções de configuração, consulte a seção a seguir.

$listeners

array

Não

Matriz de objetos TransferListener. O SDK clona cada um TransferListener por arquivo.

$max_depth

bool

-1 “Tempo de execução padrão”

Para indicar a profundidade máxima do arquivo recursivo, três passos.

$progressTracker

TransferListener

Não

Um rastreador de progresso para todos os envios.

Opção Tipo Padrão Description

recursive

bool

false

Se os subdiretórios devem ser carregados recursivamente.

follow_symbolic_links

bool

false

Se deve seguir links simbólicos.

s3_prefix

string

''

Prefixo a ser adicionado a todas as chaves do objeto.

s3_delimiter

string

'/'

O delimitador a ser usado nas chaves de objeto do S3.

track_progress bool false Se deve acompanhar o progresso.

max_concurrency

int 100 O número máximo de carregamentos simultâneos.

filter

chamável

nulo

Função para filtrar quais arquivos enviar.

upload_object_request_modifier

chamável

nulo

Função para personalizar cada solicitação de upload.

failure_policy

chamável

nulo

Função para lidar com falhas de upload.

Tipos de opções que podem ser solicitadas $config
Nome da opção nome do parâmetro tipo de parâmetro informações do parâmetro
filter $file SplFileInfo|sequência

Se convertido em string, é o caminho do arquivo. Caso contrário, é uma instância deSplFileInfo.

upload_object_request_modifier $requestArgs array Os argumentos da solicitação para cada solicitação de upload individual. Para obter mais informações sobre as opções de matriz, consulte a seção de sintaxe do parâmetro do método putObject.
failure_policy $uploadRequestArgs array Os argumentos da solicitação para cada solicitação de upload individual. Para obter mais informações sobre opções de matriz, consulte a seção de sintaxe de parâmetros do método putObject para opções de matriz.
$uploadDirectoryArgs array Uma matriz com o diretório de origem e o bucket de destino para a operação do diretório de upload.
$reason Throwable|sequência

O detentor da exceção que contém informações sobre o que causou a falha.

$uploadDirectoryResult UploadDirectoryResult O objeto que contém o número de objetos carregados com sucesso e o número que falharam.

Quando o uploadDirectory método é executado com sucesso, ele retorna um UploadDirectoryResult<add link>.

Diretório de downloads

Você pode baixar um diretório de um bucket do S3. <Are the filenames the key values when downloaded? If there is no extension in the key, is there also no extension on the file?>

<?php use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, [ 'default_region' => 'us-west-2' ]); $downloadDirPromise = $transferManager->downloadDirectory( new DownloadDirectoryRequest( 'amzn-s3-demo-bucket', '/path/to/local/directory', [ // Additional `getObject` parameters that apply to all files. ], [ // Configuration options. 's3_prefix' => 'uploads/2023/', 's3_delimiter' => '/', 'track_progress' => true, 'filter' => function ($key) { // Download only .jpg files. return pathinfo($key, PATHINFO_EXTENSION) === 'jpg'; }, 'download_object_request_modifier' => function ($args) { // Customize request arguments for each file. $args['ResponseContentType'] = 'image/jpeg'; }, 'list_objects_v2_args' => [ 'MaxKeys' => 1000, 'Prefix' => 'uploads/2023/', ], 'fails_when_destination_exists' => true, ] ) ); // Wait for the download process to complete. $result = $downloadDirPromise->wait(); $downloaded = $result->getObjectsDownloaded(); $failed = $result->getObjectsFailed(); echo "Downloaded {$downloaded} files. Failed: {$failed}\n";

Parâmetros do método downloadDirectory

O downloadDirectory método aceita uma instância de DownloadDirectoryRequest <add link> como argumento.

Parâmetros do DownloadDirectoryRequest

Parâmetro Tipo Obrigatório Descrição

$sourceBucket

string

Sim

Nome do bucket S3 de origem do qual os objetos são baixados.

$destinationDirectory

string

Sim

Diretório local para baixar arquivos.

$downloadRequestArgs

array

Não

Parâmetros adicionais de solicitação de objeto de download para todos os arquivos.

$config

array

Não

Opções de configuração para o download do diretório. Para obter mais informações sobre as opções de configuração, consulte a seção a seguir.

$listeners

array

Não

Matriz de objetos TransferListener. O SDK clona cada um TransferListener por arquivo.

$progressTracker

TransferListener

Não

Um rastreador de progresso para todos os downloads.

Opção Tipo Padrão Description

s3_prefix

string

''

Prefixo para filtragem (se não estiver emlist_objects_v2_args).

track_progress

bool

false

Se deve acompanhar o progresso.

filter

chamável

null

Função para filtrar quais objetos do S3 baixar.

download_object_request_modifier

chamável

null

Função para personalizar cada solicitação de download.

list_objects_v2_args

array

[]

Argumentos para a ListObjectsV2operação. Essa operação busca os metadados dos objetos a serem baixados.

fails_when_destination_exists

bool

false

Se deve falhar quando já existe um caminho de arquivo de destino do objeto.

failure_policy

chamável

nulo

Função para lidar com falhas de download.

max_concurrency

int

100

O número máximo de downloads simultâneos.

target_part_size_bytes

int

varies

Tamanho da peça para downloads de várias partes quando o tipo de download de várias partes é variado.

Tipos de opções que podem ser solicitadas $config
Nome da opção nome do parâmetro tipo de parâmetro informações do parâmetro
filter $objectKey string

O nome da chave do objeto do bucket.

download_object_request_modifier $requestArgs array Os argumentos da solicitação para cada solicitação de download individual. Para obter mais informações sobre as opções de matriz, consulte a seção de sintaxe do parâmetro do método getObject.
failure_policy $downloadObjectRequestArgs array

Os argumentos da solicitação para cada solicitação de download individual. Para obter mais informações sobre as opções de matriz, consulte a seção de sintaxe do parâmetro do método getObject.

$downloadDirectoryRequest array

Uma matriz com o bucket de origem e o diretório de destino para a operação do diretório de download.

$reason Throwable

O detentor da exceção que contém informações sobre o que causou a falha.

$downloadDirectoryResult DownloadDirectoryResult <add link>

O objeto que contém o número de objetos baixados com sucesso e o número que falharam.

Como as operações de diretório funcionam

Esta seção explica como o S3 Transfer Manager manipula caminhos de arquivo e chaves de objeto durante as operações de diretório.

Tratamento do caminho de upload

Quando você carrega um diretório, o SDK constrói chaves de objeto do S3 a partir de caminhos de arquivo:

  1. Calcula o caminho de cada arquivo em relação ao diretório de origem

  2. Prepende o s3_prefix valor, se especificado (adiciona automaticamente uma barra final)

  3. Substitui o separador de diretório do sistema operacional pelo s3_delimiter (padrão) /

A recursive opção controla se os subdiretórios estão incluídos. Quando false (padrão), somente arquivos de nível superior são carregados. Quandotrue, todos os arquivos nos subdiretórios são carregados, preservando a estrutura do diretório nas chaves de objeto.

nota

A chave no S3 para cada arquivo carregado será o prefixo s3 fornecido, por padrão é nulo, mais o caminho relativo do arquivo a partir do diretório de origem especificado. Além disso, substituímos o separador de diretório no nome da chave resolvida pelo delimitador s3 fornecido, que por padrão será /.

Exemplo 1

$sourceDirectory = "/opt/my-upload-directory"; $s3Prefix = "important/"; $s3Delimiter = "/"; // Default value

Estrutura de diretório

/opt/my-upload-directory/ -- my-file1.txt -- my-file-2.txt -- sub-dir/ ---- my-another-file1.txt ---- my-another-file2.txt

As chaves para cada arquivo serão:

$s3Prefix + $fileRelativePath;
- important/my-file1.txt - important/my-file-2.txt - important/sub-dir/my-another-file1.txt - important/sub-dir/my-another-file2.txt

Exemplo 2

$sourceDirectory = "/opt/my-docs"; $s3Prefix = ''; // No provided and it will defaulted to empty string $s3Delimiter = "/"; // Default value

Estrutura de diretório

/opt/my-docs/ -- my-file1.txt -- my-file-2.txt -- sub-dir/ ---- my-another-file1.txt ---- my-another-file2.txt

As chaves para cada arquivo serão:

$s3Prefix + $fileRelativePath;
- my-file1.txt - my-file-2.txt - sub-dir/my-another-file1.txt - sub-dir/my-another-file2.txt
exemplo Tratamento do caminho do diretório de upload
<?php // Source directory: /home/user/photos/ // fla/beach.jpg // fla/sunset.jpg // fla/pool/party.jpg // With s3_prefix: '2023' and recursive: true // Results: // 2023/fla/beach.jpg // 2023/fla/sunset.jpg // 2023/fla/pool/party.jpg

Tratamento do caminho de download

Quando você baixa um diretório, o SDK constrói caminhos de arquivo locais a partir das chaves de objeto do S3:

  1. Remove a s3_prefix da chave do objeto, se especificado

  2. Substitui o delimitador S3 (/) pelo separador de diretório do sistema operacional

  3. Acrescenta o resultado ao diretório de destino

Os downloads são sempre recursivos. O SDK recupera todos os objetos com o prefixo especificado e cria subdiretórios conforme necessário. Ele valida que os caminhos não são resolvidos fora do diretório de destino por motivos de segurança.

exemplo Tratamento do caminho do diretório de download
<?php // S3 objects: // 2023/fla/beach.jpg // 2023/fla/sunset.jpg // 2023/fla/pool/party.jpg // With s3_prefix: '2023' and destination: /home/user/downloads // Results: // /home/user/downloads/fla/beach.jpg // /home/user/downloads/fla/sunset.jpg // /home/user/downloads/fla/pool/party.jpg
nota

O caminho do arquivo para os objetos baixados será resolvido da seguinte forma:

  • O prefixo s3, se fornecido, será removido da chave do objeto.

  • Se o delimitador s3 for diferente do separador de diretório do sistema operacional, o delimitador s3 será substituído pelo separador de diretório do sistema operacional.

Exemplo 1

$s3Prefix = "my-prefix"; $s3Objects = [ "my-prefix/file-1.txt", "my-prefix/file-2.txt", "my-prefix/subdir/file-1.txt" ]; $targetDirectory = "/opt/bucket/downloads/";

Depois que esses objetos forem baixados, serão colocados da seguinte forma:

/opt/bucket/downloads/ -- file-1.txt -- file-2.txt -- subdir/ ---- file-1.txt

Como podemos ver, o prefixo foi removido do caminho final do arquivo dos objetos.

Exemplo 2 - sem prefixo s3

$s3Prefix = ""; // No provided $s3Objects = [ "README.md", "my-docs/file-1.txt", "my-docs/file-2.txt", "my-docs/statements/file-1.txt" ]; $targetDirectory = "/opt/bucket/downloads/";

Depois que esses objetos forem baixados, serão colocados da seguinte forma:

/opt/bucket/downloads/ -- README.md -- my-docs/ ---- file-1.txt ---- file-2.txt ---- statements/ ------ file-1.txt