Ya no tienes que buscar más por internet porque has llegado al sitio indicado, contamos con la solución que buscas sin complicaciones.
Solución:
El problema es que estás descargando a un directorio local que no existe (media/user1
). Necesitas:
- Cree primero el directorio en la máquina local
- Simplemente use el nombre de archivo en lugar de una ruta completa
- Use la ruta completa, pero reemplace las barras inclinadas (
/
) con otro carácter — esto asegurará la unicidad del nombre de archivo sin tener que crear directorios
La última opción podría lograrse a través de:
k.get_contents_to_filename(str(k.key).replace('/', '_'))
Ver también: Boto3 para descargar todos los archivos de un S3 Bucket
Descargar archivos usando boto3 es muy simple, configure sus credenciales de AWS a nivel de sistema antes de usar este código.
client = boto3.client('s3')
// if your bucket name is mybucket and the file path is test/abc.txt
// then the Bucket='mybucket' Prefix='test'
resp = client.list_objects_v2(Bucket="", Prefix="")
for obj in resp['Contents']:
key = obj['Key']
//to read s3 file contents as String
response = client.get_object(Bucket="",
Key=key)
print(response['Body'].read().decode('utf-8'))
//to download the file to local
client.download_file('', key, key.replace('test',''))
reemplazar es ubicar el archivo en su local con el nombre de archivo s3, si no lo reemplaza, intentará guardarlo como ‘prueba/abc.txt’.
Si sostienes alguna desconfianza y disposición de aclarar nuestro división eres capaz de realizar una acotación y con mucho placer lo interpretaremos.