Come posso caricare un'immagine o un file PDF su Amazon S3 tramite Gateway API?

9 minuti di lettura
0

Voglio caricare un'immagine o un file PDF su Amazon Simple Storage Service (Amazon S3) tramite Gateway Amazon API. Voglio anche recuperare un'immagine o un file PDF.

Breve descrizione

Per caricare un'immagine o un PDF come file binario su un bucket Amazon S3 tramite Gateway API, attiva il supporto binario.

Per concedere alla tua API l'accesso al bucket S3, crea un ruolo AWS Identity and Access Management (IAM). Il ruolo IAM deve includere le autorizzazioni di Gateway API per eseguire le azioni PutObject e GetObject sul bucket S3.

Risoluzione

Crea un ruolo IAM per Gateway API

1.    Apri la console IAM.

2.    Nel riquadro di navigazione, scegli Ruoli.

3.    Scegli Crea ruolo.

4.    Nella sezione Seleziona il tipo di entità attendibile, scegli Servizio AWS.

5.    Nella sezione Scegli un caso d'uso, seleziona Gateway API.

6.    Nella sezione Seleziona il tuo caso d'uso, scegli Gateway API.

7.    Scegli Avanti: Autorizzazioni.
Nota: Questa sezione mostra il servizio gestito di AWS che consente a Gateway API di inviare i log all'account di un utente. Potrai aggiungere le autorizzazioni per Amazon S3 in un secondo momento.

8.    (Facoltativo) Scegli Avanti: Tag per aggiungere i tag.

9.    Scegli Avanti: Revisiona.

10.    In Nome del ruolo, inserisci un nome per la tua policy. Ad esempio: api-gateway-upload-to-s3.

11.    Scegli Crea ruolo.

Creazione e collegamento di una policy IAM al ruolo Gateway API

1.    Apri la console IAM.

2.    Nel riquadro di navigazione, scegli Ruoli.

3.    Nella casella di ricerca, inserisci il nome del nuovo ruolo Gateway API creato. Quindi, scegli quel ruolo dalla colonna Nome del ruolo.

4.    Nella scheda Pagina dei dettagli dei ruoli, scegli Aggiungi autorizzazioni.

5.    Scegli Crea policy inline.

6.    Nella scheda Editor visivo, all'interno della sezione Seleziona un servizio, seleziona Scegli un servizio.

7.    Inserisci S3, quindi scegli S3.

8.    Nella casella Specifica le azioni consentite in S3, inserisci PutObject, quindi scegli PutObject.

9.    Inserisci GetObject, quindi scegli GetObject.

10.    Espandi Risorse, quindi scegli Specifiche.

11.    Scegli Aggiungi ARN.

12.    In Nome del bucket, inserisci il nome del bucket. Includi il prefisso, se applicabile.

13.    In Nome dell'oggetto, inserisci un nome dell'oggetto.
Nota: Il nome del bucket specifica la posizione dei file caricati. Il nome dell'oggetto specifica il modello a cui l'oggetto deve attenersi per l'allineamento alla policy. Per ulteriori informazioni, consulta le Regole di denominazione dei bucket e Panoramica degli oggetti di Amazon S3.

14.    Scegli Aggiungi.

15.    (Facoltativo) Scegli Avanti: Tag per aggiungere i tag.

16.    Scegli Avanti: Revisiona.

17.    In Nome, inserisci il nome della policy.

18.    Scegli Crea policy.

19.    Nella casella di ricerca delle policy, inserisci il nome della policy creata nel passaggio 17, quindi selezionala.

20.    Scegli Azioni della policy, quindi Collega. Viene visualizzato un elenco di ruoli IAM.

21.    Cerca il ruolo Gateway API creato in precedenza. Quindi, seleziona il ruolo.

22.    Scegli Collega policy.

Creazione di una REST API Gateway API

Creazione di un'API per soddisfare le richieste

1.    Apri la console Gateway API.

2.    Nel riquadro di navigazione, scegli API.

3.    Scegli Crea API.

4.    Nella sezione Scegli un tipo di API, in REST API scegli Crea.

5.    In Nome API, inserisci un nome per la tua API, quindi scegli Avanti.

6.    Scegli Crea API.

Creazione delle risorse per l'API

1.    Nel pannello Risorse della pagina dell'API, seleziona /.

2.    In Azioni, scegli Crea risorsa.

3.    In Nome della risorsa, inserisci cartella.

4.    In Percorso della risorsa, inserisci {folder}.

5.    Scegli Crea risorsa.

6.    Nel pannello Risorse, seleziona la risorsa /{folder} creata nel passaggio 5.

7.    Scegli Azioni, quindi scegli Crea risorsa.

8.    In Nome della risorsa, inserisci oggetto.

9.    In Percorso della risorsa, inserisci {object}.

10.    Scegli Crea risorsa.

Creazione di un metodo PUT per l'API per caricare immagini o PDF

1.    Scegli Azioni, quindi scegli Crea metodo.

2.    Nell'elenco a discesa, scegli PUT, quindi l'icona del segno di spunta.

3.    Nella categoria Tipo di integrazione, scegli Servizio AWS.

4.    In Regione AWS, scegli us-east-1 o la Regione AWS visualizzata nella pagina Proprietà del bucket.

5.    In Servizio AWS, scegli Simple Storage Service (S3).

6.    Mantieni vuoto Sottodominio AWS.

7.    In Metodo HTTP, scegli PUT.

8.    In Tipo di azione, scegli Utilizza la sostituzione del percorso.

9.    In Sostituzione del percorso (facoltativo), inserisci {bucket}/{key}.

10.    In Ruolo di esecuzione, inserisci l'ARN per il ruolo IAM creato in precedenza. La creazione dell'ARN fa parte della sezione Creazione e collegamento di una policy IAM al ruolo Gateway API.

11.    In Gestione dei contenuti, scegli Transito.

12.    Seleziona Salva.

Configurazione delle mappature dei parametri per il metodo PUT

1.    Nel pannello Risorse della pagina dell'API, scegli PUT.

2.    Scegli Richiesta di integrazione.

3.    Espandi Parametri del percorso URL.

4.    Scegli Aggiungi percorso.

5.    In Nome, inserisci bucket.

6.    In Mappato da, inserisci method.request.path.folder.

7.    Scegli l'icona del segno di spunta alla fine della riga.

8.    Ripeti i passaggi 4-7. Nel passaggio 5, imposta Nome su chiave. Nel passaggio 6, imposta Mappato da su method.request.path.object.

Creazione di un metodo GET per la tua API per recuperare un'immagine

1.    Nel pannello Risorse della pagina dell'API, scegli /{object}.

2.    Scegli Azioni, quindi scegli Crea metodo.

3.    Dall'elenco a discesa, scegli GET, quindi scegli l'icona del segno di spunta.

4.    Nella categoria Tipo di integrazione, scegli Servizio AWS.

5.    In Regione AWS, scegli us-east-1 o la regione visualizzata nella pagina Proprietà del bucket.

6.    In Servizio AWS, scegli Simple Storage Service (S3).

7.    Mantieni vuoto Sottodominio AWS.

8.    In Metodo HTTP, scegli GET.

9.    In Tipo di azione, scegli Utilizza la sostituzione del percorso.

10.    In Sostituzione del percorso (facoltativo), inserisci {bucket}/{key}.

11.    In Ruolo di esecuzione, inserisci l'ARN per il ruolo IAM creato in precedenza. La creazione dell'ARN fa parte della sezione Creazione e collegamento di una policy IAM al ruolo Gateway API.

12.    In Gestione dei contenuti, scegli Transito.

13.    Seleziona Salva.

Configurazione delle mappature dei parametri per il metodo GET

1.    Nel pannello Risorse della pagina dell'API, scegli GET.

2.    Scegli Richiesta di integrazione.

3.    Espandi Parametri del percorso URL.

4.    Scegli Aggiungi percorso.

5.    In Nome, inserisci bucket.

6.    In Mappato da, inserisci method.request.path.folder.

7.    Scegli l'icona del segno di spunta alla fine della riga.

8.    Ripeti i passaggi 4-7. Nel passaggio 5, imposta Nome su chiave. Nel passaggio 6, imposta Mappato da su method.request.path.object.

Configurazione della mappatura delle risposte per visualizzare l'immagine o il PDF nel browser

1.    Nel pannello Risorse della pagina dell'API, scegli GET.

2.    Scegli Risposta metodo.

3.    Espandi 200.

4.    In Corpo della risposta per 200, rimuovi applicazione/json.

5.    In Intestazioni della risposta per 200, scegli Aggiungi intestazione.

6.    In Nome, inserisci content-type.

7.    Scegli l'icona del segno di spunta per salvare.

8.    Scegli Esecuzione metodo per tornare al riquadro Esecuzione metodo.

9.    Scegli Risposta di integrazione.

10.    Espandi 200, quindi Mappature intestazione.

11.    Scegli l'icona a forma di matita alla fine della riga denominata content-type.

12.    Inserisci 'image/jpeg' per visualizzare un file immagine.
-oppure-
Inserisci 'application/pdf' per visualizzare un file PDF.

Configurazione dei tipi di file multimediali binari per l'API

1.    Nel riquadro di navigazione della pagina dell'API, scegli Impostazioni.

2.    Nella sezione Tipi di file multimediali binari, scegli Aggiungi tipo di file multimediale binario.

3.    Nella casella di testo, aggiungi la seguente stringa: */*
Nota: Non inserire la stringa tra virgolette. Puoi sostituire un carattere jolly per un particolare tipo MIME (Multipurpose Internet Mail Extensions) che desideri trattare come un tipo di file multimediale binario. Ad esempio, per fare in modo che Gateway API tratti le immagini JPEG come tipi di file multimediali binari, scegli 'image/jpeg'. Se aggiungi */*, Gateway API tratta tutti i tipi di file multimediali come binari.

4.    Scegli Salva modifiche.

Risoluzione dell'errore CORS con le impostazioni binarie per l'API

1.    Se utilizzi le API precedentemente indicate (PUT e GET) in un'applicazione Web, è possibile che si verifichi un errore CORS. Per ulteriori informazioni, consulta Errori CORS sul sito Web di Mozilla.

2.    Per risolvere l'errore CORS con le impostazioni binarie attivate, avvia CORS dalla console Gateway API.

3.    Nel pannello Risorse della pagina dell'API, seleziona /{object}.

4.    In Azioni, scegli Abilita CORS.

5.    Scegli Abilita CORS e sostituisci le intestazioni CORS esistenti.

6.    Per aggiornare la proprietà di gestione dei contenuti, esegui il comando CLI update-integration. Questo aggiornamento consente al contenuto binario di gestire le richieste di opzioni preliminari con una simulazione di integrazione.

7.    Aggiorna l'ID API, l'ID risorsa e la Regione AWS per eseguire i due comandi CLI seguenti. Per ottenere l'ID API e l'ID risorsa, seleziona la risorsa {object} nella parte superiore della console Gateway API.

aws apigateway update-integration --rest-api-id API_ID --resource-id RESOURCE_id --http-method OPTIONS --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region AWS_REGION
aws apigateway update-integration-response --rest-api-id API_ID --resource-id RESOURCE_id --http-method OPTIONS --status-code 200 --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region AWS_REGION

Implementazione dell'API

1.    Nel riquadro di navigazione della pagina dell'API, scegli Risorse.

2.    Nel riquadro Risorse, scegli Azioni, quindi Implementa API.

3.    Nella finestra Implementa API, in Fase di implementazione, scegli [New Stage].

4.    In Nome della fase, inserisci v1.

5.    Scegli Implementa.

6.    Nel pannello di navigazione, scegli Fasi.

7.    Scegli la fase v1. Viene visualizzato l'URL di richiamo per effettuare richieste allo snapshot dell'API implementato.

8.    Copia l'URL di richiamo.

Nota: Per ulteriori informazioni, consulta Implementazione di una REST API in Gateway Amazon API.

Richiamo dell'API per caricare un file immagine su S3

Aggiungi il nome del bucket e il nome del file dell'oggetto all'URL di richiamo dell'API. Quindi, effettua una richiesta HTTP PUT con un client a scelta. Ad esempio, con l'applicazione Postman, scegli Metodo PUT nel menu a discesa. Scegli Corpo, quindi binario. Quando viene visualizzato il pulsante Seleziona file, seleziona un file locale da caricare.

Per ulteriori informazioni, consulta Richiamo di una REST API in Gateway Amazon API.

Esempio di comando curl per effettuare una richiesta HTTP PUT per caricare un'immagine o un PDF

Nell'esempio seguente, abc12345 è l'ID API, testfolder è il bucket S3 e testimage.jpeg è il file locale caricato:

curl -i --location --request PUT 'https://abc12345.execute-api.us-west-2.amazonaws.com/v1/testfolder/testimage.jpeg' --header 'Content-Type: text/plain' --data-binary '@/Path/to/file/image.jpeg'

Importante: Se */* è incluso nell'elenco dei tipi di file multimediali binari, puoi effettuare una richiesta PUT per caricare il file. Se image.jpeg è incluso nell'elenco dei tipi di file multimediali binari, devi aggiungere l'intestazione Content-Type alla tua richiesta PUT. Devi impostare Intestazione Content-Type su 'image/jpeg'.

Ora puoi vedere l'immagine o il PDF in un browser Web con lo stesso URL. Ciò avviene perché il browser Web effettua una richiesta GET.

Informazioni correlate

Abilitazione del supporto binario tramite REST API Gateway API