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 ?

4voto

vishal pankhaniya Points 316

Vous pouvez essayer celui-ci, il fonctionne pour moi.

const params = {
          Bucket: 'bucket-name',
          Body: file,
          ACL: 'public-read',
          ContentType: contentType,
          ContentEncoding: 'base64',
          ContentDisposition: 'attachment',
        };

3voto

Vous pouvez essayer celui-ci, ContentType est obligatoire pour ouvrir dans un navigateur si vous avez déjà ouvert une URL sur le navigateur alors essayez en incognito.

var params = {
            Bucket: config.BUCKET_NAME,
            Key: fileName,
            ContentEncoding: 'base64',
            ContentDisposition: 'inline',
            ContentType: 'image/jpeg',
            Body: buf
        };

3voto

Linesofcode Points 1791

J'ai découvert que si nous passons une valeur vide à ContentType il ouvrira le fichier au lieu de le télécharger.

Cette fonction est très utile pour le téléchargement de fichiers de toutes sortes d'extensions.

$s3->putObject(
[
    'Bucket' => ..,
    'Key' => ..,
    'Body' => ..,
    'ContentType' => '', <---
    'ACL' => 'public-read',
]);

2voto

Adriano Rabello Points 11

J'ai eu le même problème aujourd'hui. Le problème était le suivant Content-type lorsque j'ai enregistré le fichier dans S3. J'utilise Spring Boot, et le contenu des données dans s3 a été enregistré. application/octet-stream dans les propriétés de la valeur au lieu de image/jpeg par exemple. Par conséquent, lorsque j'ai ouvert le lien du fichier, le navigateur a téléchargé le fichier.

La solution à ce problème consiste à modifier le Content-type avant de sauvegarder le fichier dans s3 !

1voto

vigamage Points 739

Si quelqu'un qui utilise le SDK Java trouve une solution à ce problème, vous devez définir le type de contenu comme ObjectMetaData.

ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/png");

s3client.putObject(new PutObjectRequest
    (bucketName, fileName + ".png", inputStream, 
     objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead));

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