9
votes

Impossible de définir le type de contenu de fichier dans S3

Comment définissez-vous le type de contenu sur un fichier dans un compte S3 compatible WebHosting via le module Python Boto?

Je fais: p>

from boto.s3.connection import S3Connection
from boto.s3.key import Key
from boto.cloudfront import CloudFrontConnection

conn = S3Connection(access_key_id, secret_access_key)
bucket = conn.create_bucket('mybucket')
b = conn.get_bucket(bucket)
b.set_acl('public-read')

fn = 'index.html'
template = '<html>blah</html>'
k = Key(b)
k.key = fn
k.set_contents_from_string(template)
k.set_acl('public-read')
k.set_metadata('Content-Type', 'text/html')


1 commentaires

Je ne suis pas complètement certain, mais si je me souviens bien, l'ordre de vos opérations est significatif. Essayez de réorganiser vos opérations de clé - Définissez les métadonnées Type de contenu avant de définir le contenu, par exemple.


4 Réponses :


17
votes

La méthode set_metadata est vraiment destinée à définir les métadonnées utilisateur sur les objets S3. Beaucoup de champs de métadonnées HTTP standard ont des attributs de première classe à les représenter, par exemple. content_type . De plus, vous souhaitez définir les métadonnées avant d'envoyer l'objet à S3. Quelque chose comme ça devrait fonctionner: xxx

Notez que vous pouvez définir des stratégies ACL en conserve au moment où vous écrivez l'objet à S3 qui enregistre avoir à créer un autre appel d'API. >


0 commentaires

0
votes

Je n'ai pas été capable d'obtenir la solution ci-dessus pour persister mes changements de métadonnées.

Peut-être parce que j'utilisais un fichier et j'étais réinitialisé le type de contenu à l'aide de MimeType? Je télécharge également des fichiers M3U8 et TS pour le codage HLS afin de pouvoir interférer également.

Quoi qu'il en soit, voici ce qui a fonctionné pour moi. xxx


2 commentaires

Qu'est-ce que godet_handle ?


C'est juste la chaîne contenant le nom du godet en S3



2
votes

Pour les personnes qui ont besoin d'une doublure pour cela,

'private'|'public-read'|'public-read-write'|'authenticated-read'|'aws-exec-read'|'bucket-owner-read'|'bucket-owner-full-control'


0 commentaires

0
votes

Si vous utilisez AWS S3 BitBucket Pipelines Python Ajouter le paramètre content_type :

s3_upload.py xxx

puis modifier bitbucket -pipelines.yml comme suit: xxx

content_type param peut être l'une des suivantes: Types MIME (types de média IANA)


0 commentaires