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 ?

102voto

Neo Points 2870
$client->putObject(array(
        'Bucket'     => 'buckname',
        'Key'        => $destination,
        'SourceFile' => $source,
        'ContentType' =>'image/jpeg', //<-- this is what you need!
        'ACL'          => 'public-read'//<-- this makes it public so people can see it
    ));

55voto

gregbeaty Points 669

Vous devez modifier le Content-Type. Dans la console S3, cliquez avec le bouton droit de la souris sur l'objet et sélectionnez Properties, puis cliquez sur Metadata. Vous pouvez également le faire de manière programmatique : http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type

19voto

Alin Razvan Points 51

Vous devez également spécifier la disposition du contenu pour les pièces jointes en ligne.

$client->putObject(array(
    'Bucket'     => 'buckname',
    'Key'        => $destination,
    'SourceFile' => $source,
    'ContentType' =>'image/jpeg', //<-- this is what you need!
    'ContentDisposition' => 'inline; filename=filename.jpg', //<-- and this !
    'ACL'          => 'public-read'//<-- this makes it public so people can see it
));

18voto

Anthony Awuley Points 529

Si vous utilisez python, vous pouvez définir ContentType comme suit

s3 = boto3.client('s3')

mimetype = 'image/jpeg' # you can programmatically get mimetype using the `mimetypes` module
s3.upload_file(
    Filename=local_path,
    Bucket=bucket,
    Key=remote_path,
    ExtraArgs={
        "ContentType": mimetype
    }
)

Vous pouvez également réaliser la même chose dans aws cli. Note *.jpeg Vérifiez s3 documentation

aws s3 cp \
      --exclude "*" \
      --include "*.jpeg" \
      --content-type="image/jpeg"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://<bucket>/<path>/ \
       s3://<bucket>/<path>/

Si vous souhaitez modifier un seul objet à la fois, vous pouvez également utiliser la méthode suivante s3api copy-object

aws s3api copy-object \
    --content-type="image/jpeg" \
    --metadata-directive="REPLACE" \
    --copy-source "<bucket>/<key>" \
    --bucket "<bucket>" \
    --key "<key>" \
    --acl public-read

6voto

Siddhesh Mishra Points 82

Vous pouvez également modifier le type de contenu à partir de la console AWS S3.

enter image description here

Ensuite, vous verrez apparaître le côté, utilisez-le pour le modifier manuellement.

enter image description here

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