Для загрузки файлов из S3 в приложении на FastAPI можно использовать библиотеку `boto3`, которая предоставляет инструменты для работы с Amazon S3. Чтобы пользователь смог скачать файл по ссылке, вы можете использовать метод `generate_presigned_url`, который генерирует временную ссылку для доступа к файлу в S3.
Вот пошаговая инструкция как это сделать:
1. **Установите необходимые библиотеки**:
Убедитесь, что у вас установлены `fastapi`, `uvicorn` и `boto3`. Если нет, установите их:
```bash
pip install fastapi uvicorn boto3
```
2. **Создайте FastAPI приложение**:
Вот пример кода быстрого API, который предоставляет возможность скачать файл из S3:
```python
from fastapi import FastAPI, HTTPException
from fastapi.responses import RedirectResponse
import boto3
from botocore.exceptions import NoCredentialsError
app = FastAPI()
# Конфигурация AWS
s3_bucket_name = "your-s3-bucket-name"
s3_client = boto3.client('s3')
@app.get("/download/")
async def download_file(filename: str):
try:
# Генерация временной ссылки для скачивания файла
presigned_url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': s3_bucket_name, 'Key': filename},
ExpiresIn=3600 # Ссылка будет действительна 1 час
)
return RedirectResponse(url=presigned_url)
except NoCredentialsError:
raise HTTPException(status_code=500, detail="Credentials not available")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
```
3. **Запустите ваше приложение**:
Вы можете запустить приложение с помощью Uvicorn:
```bash
uvicorn your_file_name:app --reload
```
Замените `your_file_name` на имя вашего файла.
4. **Скачайте файл**:
Теперь, если пользователь перейдет по URL `/download/?filename=your_file_name_on_s3`, он будет перенаправлен на URL для скачивания файла.
Замените `your_file_name_on_s3` на имя файла, который вы хотите, чтобы пользователь скачал.
### Примечания:
- Убедитесь, что у вас есть правильные учетные данные AWS и что у вашего IAM пользователя или роли есть доступ к S3 и нужным объектам.
- Параметр `ExpiresIn` позволяет установить время действия временной ссылки, после которого она станет недоступной.
- Важно помнить о безопасности: убедитесь, что пользователь имеет право на доступ к загружаемому файлу (это можно контролировать через логику в вашем приложении).