Operaciones de directorio - AWS SDK para PHP

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Operaciones de directorio

S3 Transfer Manager puede gestionar transferencias de directorios completos.

Cargar directorio

S3 Transfer Manager puede cargar un directorio completo en un bucket de 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 del método uploadDirectory

El uploadDirectory método acepta una instancia de UploadDirectoryRequest <add link> como argumento.

Parámetros UploadDirectoryRequest

Parámetro Tipo Obligatorio Descripción

$sourceDirectory

string

Ruta del directorio local que se va a cargar.

$targetBucket

cadena

Nombre del bucket S3 de destino.

$uploadRequestArgs

array

No

Parámetros de solicitud de carga de objetos adicionales para todos los archivos.

$config

array

No

Opciones de configuración para la carga del directorio. Para obtener más información sobre las opciones de configuración, consulte la siguiente sección.

$listeners

array

No

Una matriz de objetos TransferListener. El SDK clona cada uno TransferListener por archivo.

$max_depth

bool

-1 «Tiempo de ejecución predeterminado»

Para indicar la profundidad máxima del archivo recursivo, recorra tres pasos.

$progressTracker

TransferListener

No

Un rastreador del progreso de todas las subidas.

Opción Tipo Predeterminado Description (Descripción)

recursive

bool

false

Si se deben cargar subdirectorios de forma recursiva.

follow_symbolic_links

bool

false

Si se deben seguir los enlaces simbólicos.

s3_prefix

cadena

''

Prefijo para añadir a todas las claves de objetos.

s3_delimiter

cadena

'/'

El delimitador que se utilizará en las claves de objetos de S3.

track_progress bool false Si se debe realizar un seguimiento del progreso.

max_concurrency

int 100 El número máximo de cargas simultáneas.

filter

invocable

null

Función para filtrar qué archivos subir.

upload_object_request_modifier

invocable

null

Función para personalizar cada solicitud de carga.

failure_policy

invocable

null

Función para gestionar los errores de carga.

Tipos de opciones invocables $config
Nombre de la opción nombre del parámetro tipo de parámetro información del parámetro
filter $file SplFileInfo|cadena

Si se convierte en cadena, es la ruta del archivo. De lo contrario, es una instancia deSplFileInfo.

upload_object_request_modifier $requestArgs array Los argumentos de solicitud de cada solicitud de carga individual. Para obtener más información sobre las opciones de matriz, consulte la sección de sintaxis de parámetros del método PutObject.
failure_policy $uploadRequestArgs array Los argumentos de solicitud de cada solicitud de carga individual. Para obtener más información sobre las opciones de matriz, consulte la sección de sintaxis de parámetros del método PutObject para ver las opciones de matriz.
$uploadDirectoryArgs array Una matriz con el directorio de origen y el depósito de destino para la operación de carga del directorio.
$reason Throwable|cadena

El marcador de excepciones que contiene información sobre la causa del error.

$uploadDirectoryResult UploadDirectoryResult El objeto que contiene el número de objetos cargados correctamente y el número de objetos que han fallado.

Cuando el uploadDirectory método se ejecuta correctamente, devuelve un UploadDirectoryResult<add link>.

Directorio de descargas

Puede descargar un directorio desde un bucket de 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 del método downloadDirectory

El downloadDirectory método acepta una instancia de DownloadDirectoryRequest <add link> como argumento.

Parámetros DownloadDirectoryRequest

Parámetro Tipo Obligatorio Descripción

$sourceBucket

string

Nombre del depósito de S3 de origen desde el que se descargan los objetos.

$destinationDirectory

cadena

Directorio local en el que descargar los archivos.

$downloadRequestArgs

array

No

Parámetros adicionales de solicitud de objetos de descarga para todos los archivos.

$config

array

No

Opciones de configuración para la descarga del directorio. Para obtener más información sobre las opciones de configuración, consulte la siguiente sección.

$listeners

array

No

Una matriz de objetos TransferListener. El SDK clona cada uno TransferListener por archivo.

$progressTracker

TransferListener

No

Un rastreador del progreso de todas las descargas.

Opción Tipo Predeterminado Description (Descripción)

s3_prefix

cadena

''

Prefijo para filtrar (si no estálist_objects_v2_args).

track_progress

bool

false

Si se debe realizar un seguimiento del progreso.

filter

invocable

null

Función para filtrar qué objetos de S3 descargar.

download_object_request_modifier

invocable

null

Función para personalizar cada solicitud de descarga.

list_objects_v2_args

array

[]

Argumentos a favor de la ListObjectsV2operación. Esta operación busca los metadatos de los objetos que se van a descargar.

fails_when_destination_exists

bool

false

Si se debe producir un error cuando ya existe la ruta del archivo de destino del objeto.

failure_policy

invocable

null

Función para gestionar los errores de descarga.

max_concurrency

int

100

El número máximo de descargas simultáneas.

target_part_size_bytes

int

varía

Tamaño de pieza para descargas de varias partes cuando el tipo de descarga de varias partes está dentro de un intervalo.

Tipos de opciones invocables $config
Nombre de la opción nombre del parámetro tipo de parámetro información del parámetro
filter $objectKey cadena

El nombre de la clave del objeto del depósito.

download_object_request_modifier $requestArgs array Los argumentos de solicitud de cada solicitud de descarga individual. Para obtener más información sobre las opciones de matriz, consulte la sección de sintaxis de los parámetros del método GetObject.
failure_policy $downloadObjectRequestArgs array

Los argumentos de solicitud de cada solicitud de descarga individual. Para obtener más información sobre las opciones de matriz, consulte la sección de sintaxis de los parámetros del método GetObject.

$downloadDirectoryRequest array

Una matriz con el depósito de origen y el directorio de destino para la operación de directorio de descargas.

$reason Throwable

El contenedor de excepciones que contiene información sobre la causa del error.

$downloadDirectoryResult DownloadDirectoryResult <add link>

El objeto que contiene el número de objetos descargados correctamente y el número de objetos que han fallado.

Cómo funcionan las operaciones de directorio

En esta sección se explica cómo el S3 Transfer Manager gestiona las rutas de los archivos y las claves de los objetos durante las operaciones de directorio.

Gestión de las rutas de carga

Al cargar un directorio, el SDK crea claves de objetos de S3 a partir de las rutas de los archivos:

  1. Calcula la ruta de cada archivo en relación con el directorio de origen

  2. Antepone el s3_prefix valor si se especifica (añade automáticamente una barra diagonal final)

  3. Sustituye el separador de directorios del sistema operativo por el (predeterminado) s3_delimiter /

La recursive opción controla si se incluyen los subdirectorios. Cuando false (predeterminado), solo se cargan los archivos de nivel superior. Cuandotrue, se cargan todos los archivos de los subdirectorios, conservando la estructura de directorios en las claves de objetos.

nota

La clave en S3 para cada archivo cargado será el prefijo s3 proporcionado, que de forma predeterminada es nulo, más la ruta relativa del archivo que comienza en el directorio de origen especificado. Además, sustituimos el separador de directorios del nombre de clave resuelto por el delimitador s3 proporcionado, que de forma predeterminada será /.

Ejemplo 1

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

Estructura de directorios

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

Las claves de cada archivo serán:

$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

Ejemplo 2

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

Estructura de directorios

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

Las claves de cada archivo serán:

$s3Prefix + $fileRelativePath;
- my-file1.txt - my-file-2.txt - sub-dir/my-another-file1.txt - sub-dir/my-another-file2.txt
ejemplo Gestión de la ruta del directorio de carga
<?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

Gestión de rutas de descarga

Al descargar un directorio, el SDK crea rutas de archivos locales a partir de claves de objetos de S3:

  1. Elimina la clave s3_prefix del objeto si se especifica

  2. Sustituye el delimitador S3 (/) por el separador de directorios del sistema operativo

  3. Añade el resultado al directorio de destino

Las descargas son siempre recursivas. El SDK recupera todos los objetos con el prefijo especificado y crea subdirectorios según sea necesario. Valida que las rutas no se resuelvan fuera del directorio de destino por motivos de seguridad.

ejemplo Gestión de las rutas del directorio de descargas
<?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

La ruta del archivo de los objetos descargados se resolverá de la siguiente manera:

  • El prefijo s3, si se proporciona, se eliminará de la clave del objeto.

  • Si el delimitador S3 es diferente del separador de directorios del sistema operativo, el delimitador s3 se sustituirá por el separador de directorios del sistema operativo.

Ejemplo 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/";

Una vez descargados esos objetos se colocarán de la siguiente manera:

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

Como podemos ver, el prefijo se eliminó de la ruta final del archivo de los objetos.

Ejemplo 2: sin el prefijo 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/";

Una vez descargados esos objetos se colocarán de la siguiente manera:

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