133 votes

AWS S3 affiche le fichier en ligne au lieu de forcer le téléchargement

Pour une raison quelconque, les fichiers de mon seau S3 sont forcés à être téléchargés au lieu de s'afficher en ligne. Ainsi, si je copie le lien d'une image et le colle dans la barre d'adresse, puis navigue jusqu'à elle, mon navigateur est invité à la télécharger. Au lieu de cela, je dois cliquer sur ouvrir l'image pour accéder à l'URL.

Comment modifier la façon dont les fichiers sont servis à partir de S3 ?

1voto

Mike T. Points 25

Utilisez ces deux propriétés pour forcer les navigateurs à mettre en ligne le fichier depuis s3 :

ResponseContentType' et ResponseContentDisposition'.

Vous pouvez les utiliser dans la commande getCommand lors de la génération d'une URL signée.

$cmd = $s3Client->getCommand('GetObject', [
        'Bucket' => $bucket_name,
        'Key' => $filename,
        'ResponseContentType' =>  get_mime_type($filename),
        'ResponseContentDisposition' => 'inline; filename='.$user_filename
    ]);

get_mime_type est juste ma fonction personnalisée pour retourner le type mime en utilisant le nom du fichier.

Voici ce que j'ai utilisé lorsque j'ai été confronté au même problème, j'ai des millions de fichiers dans mon seau s3 et je ne pouvais pas changer le type mime individuellement dans la console.

1voto

Clau Points 41

Ce qui a vraiment fonctionné pour moi, c'est de définir le ContentType paramètres à image/png avant de sauvegarder le fichier S3.

0voto

kd12345 Points 440

Si vous l'ouvrez en incognito, il fonctionnera ; sinon, il ne fonctionnera pas pour une raison quelconque.

0voto

Tài Hatranduc Points 19

Après 2 jours de combat, voici le code que je veux.
Voici le code pour tous ceux qui utilisent "generate_presigned_post" en python

s3 = boto3.client('s3',
                  aws_access_key_id="<aws_access_key_id>",
                  aws_secret_access_key="<aws_secret_access_key>",
                  config=Config(
                      region_name="<region_name>",
                      signature_version="<signature_version>"
                  ))

key = 'bbb.png'

creds = s3.generate_presigned_post(
    Bucket="<Bucket>",
    Key=key,
    Fields={"Content-Type": "image/png"},
    Conditions=[{"Content-Type": "image/png"}],
    ExpiresIn=3600)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X