1

J'ai une application Web qui accepte les données multipart/form et qui a configuré la passerelle API pour lui transmettre les requêtes. Cependant, chaque fois que je télécharge des images dans le formulaire, elles finissent par être plus volumineuses que le fichier original que j'ai téléchargé et corrompu. Si j'exécute la même méthode sans passer par la passerelle API AWS, l'image est correctement téléchargée. Des idées de ce qui me manque ici?Multipart passthrough dans API Gateway

le ci-dessous est mon code S3 qui lit les données de formulaire dans un flacon:

f = request.files['attachment'] 
    fp = StringIO(f.read()) 
    file_uuid = str(uuid.uuid4()) 
    bucketkey.key = "att_%s%s" % (file_uuid, file_extension(f.filename)) 
    bucketkey.set_contents_from_file(fp) 

Je vais joindre un lien vers un échantillon jpg qui est corrompu si son utile du tout.

https://s3.eu-central-1.amazonaws.com/agendacommunities/att_ef7375b1-bb19-4df9-9162-5582ed66797c.jpeg

+0

Il s'agit probablement d'un encodage en Base64. Avez-vous essayé le décodage de Base64? –

+0

Pas de chance malheureusement - incapable de décoder le fichier lui-même ou le contenu du fichier. Les autres champs du formulaire sont passés correctement mais ce qui est déroutant. J'aurais pensé que tout le corps était encodé mais nein. merci pour la contribution si! – Alex

+0

Avez-vous essayé * de télécharger * les images "corrompues" et d'examiner le contenu du fichier avec un éditeur hexadécimal? Il y a un moyen pour qu'un fichier devienne plus volumineux et devrait être explicite si vous examinez ce que vous avez téléchargé. –

Répondre

1

Quelle est votre intention avec StringIO? f.read() vous donnera des octets, pas une chaîne. Je pense que vous pouvez passer f directement à set_contents_from_file et il va lire à partir de f.

f = request.files['attachment'] 
file_uuid = str(uuid.uuid4()) 
bucketkey.key = "att_%s%s" % (file_uuid, file_extension(f.filename)) 
bucketkey.set_contents_from_file(f) 
0

Vous devez définir un en-tête de type de contenu pour que vos données soient reconnues comme binaires par API Gateway.