

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á.

# URL pré-assinada do Amazon S3 com a versão 3 AWS SDK para PHP
<a name="s3-presigned-url"></a>

Você pode autenticar determinados tipos de solicitações passando as informações necessárias como parâmetros de query string em vez de usar o cabeçalho de autorização HTTP. Isso é útil para habilitar o acesso de navegadores de terceiros a seus dados privados do Amazon S3 sem um proxy na solicitação. A ideia é construir uma solicitação “pré-assinada” e codificá-la como um URL que outro usuário possa usar. Além disso, você pode limitar uma solicitação pré-assinada, especificando um tempo de expiração.

## Criar um URL pré-assinado para uma solicitação HTTP GET
<a name="s3-presigned-url-get"></a>

O exemplo de código a seguir mostra como criar um URL pré-assinado para uma solicitação HTTP GET usando o SDK para PHP.

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'region' => 'us-west-2',
]);

// Supply a CommandInterface object and an expires parameter to the `createPresignedRequest` method.
$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('GetObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();

echo $presignedUrl;
```

A [referência da API para o método `createPresignedRequest`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#method_createPresignedRequest) fornece mais detalhes.

Outra pessoa pode usar o valor de `$presignedUrl` para recuperar o objeto na próxima hora. Quando a solicitação HTTP GET é feita, usando um navegador, por exemplo, o serviço S3 interpreta que a chamada está vindo do usuário que criou o URL pré-assinado.

## Criar um URL pré-assinado para uma solicitação HTTP PUT
<a name="s3-presigned-url-put"></a>

O exemplo de código a seguir mostra como criar um URL pré-assinado para uma solicitação HTTP PUT usando o SDK para PHP.

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'region' => 'us-west-2',
]);

$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('PutObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();
```

Agora, outra pessoa pode usar o URL pré-assinado em uma solicitação HTTP PUT para fazer o upload de um arquivo:

```
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;

// ...

function uploadWithPresignedUrl($presignedUrl, $filePath, $s3Client): ?Response
{
    // Get the HTTP handler from the S3 client.
    $handler = $s3Client->getHandlerList()->resolve();
    
    // Create a stream from the file.
    $fileStream = new Stream(fopen($filePath, 'r'));
    
    // Create the request.
    $request = new Request(
        'PUT',
        $presignedUrl,
        [
            'Content-Type' => mime_content_type($filePath),
            'Content-Length' => filesize($filePath)
        ],
        $fileStream
    );
    
    // Send the request using the handler.
    try {
        $promise = $handler($request, []);
        $response = $promise->wait();
        return $response;
    } catch (Exception $e) {
        echo "Error uploading file: " . $e->getMessage() . "\n";
        return null;
    }
}
```