

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

# Caricamento di oggetti con presigned URLs
<a name="PresignedUrlUploadObject"></a>



Puoi usare presigned URLs per consentire a qualcuno di caricare un oggetto nel tuo bucket Amazon S3. L'utilizzo di un URL predefinito consentirà il caricamento senza richiedere a terzi di disporre di credenziali o autorizzazioni di AWS sicurezza. Le funzionalità dell'URL prefirmato sono limitate dalle autorizzazioni dell'utente che lo ha creato. In altre parole, se si riceve un URL prefirmato per caricare un oggetto, è possibile caricarlo solo se il creatore dell'URL dispone delle autorizzazioni necessarie per caricare tale oggetto.

Quando carichi un oggetto nel bucket utilizzando l'URL, Amazon S3 crea l'oggetto in un bucket specifico. Se nel bucket esiste già un oggetto con la stessa chiave specificata nell'URL prefirmato, Amazon S3 sostituisce l'oggetto esistente con l'oggetto caricato. Dopo il caricamento, il proprietario del bucket sarà il proprietario dell'oggetto.

Per informazioni generali sulle impostazioni predefinite URLs, vedere. [Scarica e carica oggetti con presigned URLs](using-presigned-url.md)

Genera un URL prefirmato per un oggetto senza scrivere alcun codice mediante AWS Explorer per Visual Studio. È inoltre possibile generare un URL predefinito a livello di codice utilizzando. AWS SDKs

**Nota**  
Al momento, AWS Toolkit for Visual Studio non supporta Visual Studio per Mac.

## Utilizzo di AWS Toolkit for Visual Studio (Windows)
<a name="upload-object-presignedurl-vsexplorer"></a>

1. Installa AWS Toolkit for Visual Studio utilizzando le seguenti istruzioni, [Installazione e configurazione del Toolkit for Visual](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html) Studio nella Guida per *AWS Toolkit for Visual Studio l'utente*.

1. Effettuare la connessione AWS utilizzando i seguenti passaggi, [Connessione a AWS](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/connect.html) nella *Guida per AWS Toolkit for Visual Studio l'utente*.

1. Nel pannello laterale sinistro di **AWS Explorer**, fai clic con il pulsante destro del mouse sul bucket in cui si desidera caricare un oggetto.

1. Scegli **Crea URL prefirmato...**

1. Nella finestra a comparsa, imposta la data e l'ora di scadenza dell'URL prefirmato.

1. Per **Chiave dell'oggetto**, imposta il nome del file da caricare. Il file che si sta caricando deve corrispondere esattamente a questo nome. Se nel bucket esiste già un oggetto con la stessa chiave dell'oggetto, Amazon S3 sostituirà l'oggetto esistente con quello appena caricato. 

1. **Scegli PUT** per specificare che questo URL prefirmato verrà utilizzato per caricare un oggetto.

1. Scegli il pulsante **Genera**.

1. Per copiare l’URL negli appunti, scegliere **Copia**.

1. Per utilizzare questo URL, puoi inviare una richiesta PUT con il comando `curl`. Includi il percorso completo del file e l'URL prefirmato stesso. 

   ```
   curl -X PUT -T "/path/to/file" "presigned URL"
   ```

## Utilizzo di AWS SDKs per generare un URL `PUT` predefinito per il caricamento di un file
<a name="presigned-urls-upload-sdk"></a>

 È possibile generare un URL prefirmato in grado di eseguire un’azione S3 per un periodo di tempo limitato. 

**Nota**  
Se si utilizza la AWS CLI o AWS SDKs, il tempo di scadenza per presigned URLs può essere impostato fino a 7 giorni. Per ulteriori informazioni, consulta [Data di scadenza per](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html#PresignedUrl-Expiration) i predefiniti. URLs

------
#### [ Python ]

 Il seguente script Python genera un URL prefirmato `PUT` per caricare un oggetto in un bucket per uso generico S3. 

1. Copia il contenuto dello script e salvalo come file «*put-only-url.py*». Per utilizzare gli esempi seguenti, *user input placeholders* sostituiscili con le tue informazioni (come il nome del file). 

   ```
   import argparse
   import boto3
   from botocore.exceptions import ClientError
   
   def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
       """
       Generate a presigned Amazon S3 URL that can be used to perform an action.
       
       :param s3_client: A Boto3 Amazon S3 client.
       :param client_method: The name of the client method that the URL performs.
       :param method_parameters: The parameters of the specified client method.
       :param expires_in: The number of seconds the presigned URL is valid for.
       :return: The presigned URL.
       """
       try:
           url = s3_client.generate_presigned_url(
               ClientMethod=client_method,
               Params=method_parameters,
               ExpiresIn=expires_in
           )
       except ClientError:
           print(f"Couldn't get a presigned URL for client method '{client_method}'.")
           raise
       return url
   
   def main():
       parser = argparse.ArgumentParser()
       parser.add_argument("bucket", help="The name of the bucket.")
       parser.add_argument(
           "key", help="The key (path and filename) in the S3 bucket.",
       )
       parser.add_argument(
           "--region", help="The AWS region where the bucket is located.", default="us-east-1"
       )
       parser.add_argument(
           "--content-type", help="The content type of the file to upload.", default="application/octet-stream"
       )
       args = parser.parse_args()
       
       # Create S3 client with explicit region configuration
       s3_client = boto3.client("s3", region_name=args.region)
       
       # Optionally set signature version if needed for older S3 regions
       # s3_client.meta.config.signature_version = 's3v4'
       
       # The presigned URL is specified to expire in 1000 seconds
       url = generate_presigned_url(
           s3_client, 
           "put_object", 
           {
               "Bucket": args.bucket, 
               "Key": args.key,
               "ContentType": args.content_type  # Specify content type
           }, 
           1000
       )
       print(f"Generated PUT presigned URL: {url}")
   
   if __name__ == "__main__":
       main()
   ```

1. Per generare un URL prefirmato `PUT` per il caricamento di un file, esegui lo script seguente con il nome del bucket e il percorso dell’oggetto desiderato. 

    Il seguente comando utilizza valori di esempio. Sostituisci *user input placeholders* con le informazioni appropriate.

   ```
   python put-only-url.py amzn-s3-demo-bucket <object-path> --region us-east-1 --content-type application/octet-stream
   ```

   Lo script produrrà un URL prefirmato `PUT`:

   ```
   Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWS AccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
   ```

1. È ora possibile caricare il file utilizzando l’URL prefirmato generato con curl. Assicurati di includere lo stesso tipo di contenuto utilizzato durante la generazione dell’URL:

   ```
   curl -X PUT -T "path/to/your/local/file" -H "Content-Type: application/octet-stream" "generated-presigned-url"
   ```

   Se hai specificato un tipo di contenuto diverso durante la generazione dell’URL, assicurati di utilizzare lo stesso tipo di contenuto nel comando curl.

Per altri esempi di utilizzo di AWS SDKs per generare un URL predefinito per il caricamento di un oggetto, consulta [Creare un URL predefinito per Amazon S3 utilizzando un SDK](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_PresignedUrl_section.html). AWS 

**Risoluzione degli errori SignatureDoesNotMatch**  
Se riscontri un `SignatureDoesNotMatch` errore durante l'utilizzo di presigned URLs, controlla quanto segue:  
Verifica che l’ora di sistema sia sincronizzata con un server di riferimento dell’ora affidabile
Assicurati di utilizzare l’URL esattamente come generato, senza alcuna modifica
Controlla se l’URL è scaduto e generane uno nuovo se necessario
Assicurati che il tipo di contenuto nella richiesta di caricamento corrisponda al tipo di contenuto specificato durante la generazione dell’URL
Verifica di utilizzare la Regione corretta per il bucket
Quando utilizzi curl, racchiudi l’URL tra virgolette per gestire correttamente i caratteri speciali

------