operaciones leer guardar exportar escribir datos crear con como columna archivos archivo python amazon-s3 boto

guardar - leer columna de un archivo en python



No se puede establecer el tipo de contenido del archivo en S3 (2)

El método set_metadata es realmente para establecer metadatos de usuario en objetos S3. Muchos de los campos de metadatos HTTP estándar tienen atributos de primera clase para representarlos, por ejemplo, content_type . Además, desea establecer los metadatos antes de enviar realmente el objeto a S3. Algo como esto debería funcionar:

import boto conn = boto.connect_s3() bucket = conn.get_bucket(''mybucket'') # Assumes bucket already exists key = bucket.new_key(''mykey'') key.content_type = ''text/html'' key.set_contents_from_string(mystring, policy=''public-read'')

Tenga en cuenta que puede establecer políticas de ACL en el momento de escribir el objeto en S3, lo que ahorra tener que hacer otra llamada a la API.

¿Cómo se establece el tipo de contenido en un archivo en una cuenta S3 habilitada para webhosting a través del módulo boto de Python?

Estoy haciendo:

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'')

Sin embargo, cuando accedo desde http://mybucket.s3-website-us-east-1.amazonaws.com/index.html, mi navegador me pide que descargue el archivo en lugar de simplemente publicarlo como página web.

Al mirar los metadatos en la consola de administración de S3, se muestra que el tipo de Content-Type realmente se ha establecido en "application / octet-stream". Si lo cambio manualmente en la consola, puedo acceder a la página normalmente, pero si vuelvo a ejecutar el script, lo restablece al tipo de contenido incorrecto.

¿Qué estoy haciendo mal?


No pude obtener la solución anterior para que realmente persista en mis cambios de metadatos.

Tal vez porque estaba usando un archivo y estaba restableciendo el tipo de contenido usando mimetype? También estoy cargando los archivos m3u8 y ts para la codificación HLS para que también puedan interferir.

De todos modos, esto es lo que funcionó para mí.

import boto conn = boto.connect_s3() bucket = conn.get_bucket(''mybucket'') key_m3u8 = Key(bucket_handle) key_m3u8.key = s3folder+"/"+s3keyname key_m3u8.metadata = {"Content-Type":"application/x-mpegURL","Cache-Control":"public,max-age=8"} key_m3u8.set_contents_from_filename("path_to_my_file", policy="public-read")