Как скачать файл с удаленного сервера и загрузить его на Amazon S3 с Python

Как на python загрузить файл на s3?

Загрузить файл на Amazon S3 с помощью Python можно с использованием библиотеки boto3, которая является официальным SDK для работы с AWS.

Вот шаги, чтобы загрузить файл на S3:

  1. Установите библиотеку boto3, если она еще не установлена. Вы можете сделать это с помощью pip:

    pip install boto3
  2. Настройте свои учетные данные AWS. Для этого создайте файл ~/.aws/credentials и добавьте в него ваши ключи доступа:

    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY
  3. Напишите код для загрузки файла:

import boto3
from botocore.exceptions import NoCredentialsError, ClientError

def upload_file_to_s3(file_name, bucket_name, object_name=None):
    """Загружает файл на Amazon S3

    :param file_name: Путь к файлу на локальной машине
    :param bucket_name: Имя ведра S3
    :param object_name: Имя объекта в S3 (обычно имя файла). Если None, используется file_name
    :return: True если загрузка успешна, иначе False
    """

    # Если object_name не указан, используем file_name
    if object_name is None:
        object_name = file_name

    # Создаем S3 клиент
    s3_client = boto3.client('s3')

    try:
        # Загружаем файл
        s3_client.upload_file(file_name, bucket_name, object_name)
    except FileNotFoundError:
        print(f"Файл {file_name} не найден.")
        return False
    except NoCredentialsError:
        print("Ошибка: Учетные данные не найдены.")
        return False
    except ClientError as e:
        print(f"Ошибка клиента: {e}")
        return False

    print(f"Файл {file_name} успешно загружен в {bucket_name}/{object_name}")
    return True

# Пример использования
file_name = 'path/to/your/file.txt'
bucket_name = 'your-bucket-name'
upload_file_to_s3(file_name, bucket_name)

Этот код создаёт S3 клиент и загружает указанный файл в заданное ведро. Обратите внимание на обработку ошибок, чтобы вы могли управлять различными исключениями, такими как отсутствие файла или проблемы с учетными данными.

Перед выполнением кода не забудьте заменить значения переменных file_name и bucket_name на ваши реальные значения.

мне нужно скачать файл по ссылке с удаленного компьютера и загрузить на S3

Для того чтобы скачать файл по ссылке с удаленного сервера и затем загрузить его на Amazon S3, вам нужно будет использовать несколько библиотек Python. Для скачивания файла подойдет библиотека requests, а для загрузки на S3 – boto3.

Вот шаги, как это сделать:

  1. Установите необходимые библиотеки, если они еще не установлены:
pip install requests boto3
  1. Напишите код для скачивания файла и загрузки его на S3:
import requests
import boto3
from botocore.exceptions import NoCredentialsError, ClientError

def download_file(url, local_filename):
    """Скачивает файл по URL и сохраняет его локально."""
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        with open(local_filename, 'wb') as file:
            for chunk in response.iter_content(chunk_size=1024):
                file.write(chunk)
        print(f"Файл {local_filename} скачан.")
        return local_filename
    else:
        print(f"Ошибка загрузки файла: {response.status_code}")
        return None

def upload_file_to_s3(file_name, bucket_name, object_name=None):
    """Загружает файл на Amazon S3"""
    if object_name is None:
        object_name = file_name

    # Создаем S3 клиент
    s3_client = boto3.client('s3')

    try:
        # Загружаем файл
        s3_client.upload_file(file_name, bucket_name, object_name)
    except FileNotFoundError:
        print(f"Файл {file_name} не найден.")
        return False
    except NoCredentialsError:
        print("Ошибка: Учетные данные не найдены.")
        return False
    except ClientError as e:
        print(f"Ошибка клиента: {e}")
        return False

    print(f"Файл {file_name} успешно загружен в {bucket_name}/{object_name}")
    return True

# Пример использования
url = 'https://example.com/path/to/file.txt'  # Ссылка на файл
local_filename = 'downloaded_file.txt'        # Имя файла, под которым он будет сохранен локально
bucket_name = 'your-bucket-name'              # Имя вашего ведра S3

# Скачиваем файл
downloaded_file = download_file(url, local_filename)

# Если файл успешно скачан, загружаем его на S3
if downloaded_file:
    upload_file_to_s3(downloaded_file, bucket_name)

Пояснения:

  1. Функция download_file(url, local_filename) скачивает файл по указанному URL и сохраняет его на диск с именем local_filename. Если загрузка прошла успешно (статус 200), то возвращается имя локального файла. В противном случае функция возвращает None.

  2. Функция upload_file_to_s3(file_name, bucket_name, object_name) загружает указанный файл в ведро S3.

  3. В примере вы задаете URL для скачивания, имя локального файла и имя ведра S3. Если файл успешно скачан, он будет загружен на S3.

Не забудьте заменить URL и имя ведра на ваши реальные значения перед выполнением кода!

Опубликовано 19.05.2025 21:57:43