2023. 1. 17. 13:47ㆍBootcamp_Winter_TeamL
1. main.py(라우터 생성)
app = FastAPI()
app.include_router(aws_router.router)
라우터를 사용하기 위해 선언해준다
2. connection.py(s3연결)
import boto3
from .aws_key import AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY
#사용자 접근 키#
AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
class Connect:
def __init__(self):
self.client = boto3.client(
"s3",
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
def __enter__(self):
return self
def connect(self):
return self.client
def __exit__(self, exc_type, exc_val, exc_tb):
...
import boto3 -> s3와 연동하기위해 boto3를 설치한 후 사용
aws_key에 access 키와 secret access키를 작성 후 받아옴-> 키는 노출되면 안되기 때문
3. aws_router.py(사진 업로드)
async def load_photo(file:UploadFile=File(...), type :Optional[str]=None, user :Optional[int]=None, db: Session=Depends(get_db)):
filename=f"{type}_{user}_{uuid.uuid4()}.jpeg"
content=await file.read()
post_bucket(content,filename)
return filename, type, user
UploadFile=File(...) -> 파일을 받아오는 메소드
filename -> 파일 이름 지정(uuid는 파일 구분을 위해 난수 생성 -> s3에 같은 이름의 파일이 올라가면 덮어씌워짐)
4. bucket.py
def post_bucket(image_file: str, key_name: str):
connect = Connect()
with connect as client:
try:
client = connect.connect()
client.put_object(
Body=image_file, Bucket=S3_BUCKET, Key=key_name, ContentType="image.jpeg"
)
except ClientError as e:
print("Error during image upload. {}".format(e.response["Error"]["Code"]))
connect = Connect() -> connection.py에 있는 Connect함수를 이용해 s3에 연결
client.put_object -> s3에 파일을 업로드 하기 위한 함수(정확히는 오브젝트 업로드)
Body=image_file -> 파일이 이미지 파일임을 명시
Bucket=S3_BUCKET -> S3버킷의 이름 명시(상수로 정의)
Key=key_name -> aws_router.py에서 받아온 s3에 업로드 될 파일
ContentType="image.jpeg" -> 이미지 파일이 들어간다고 선언
'Bootcamp_Winter_TeamL' 카테고리의 다른 글
(Docker 와 mysql 연결 문제) 2003 - Can't connect to MySQL server on xxx (61 "Connection refused") (1) | 2023.01.17 |
---|---|
s3 키 노출 (0) | 2023.01.12 |
fast api 와 s3버킷 연결 (0) | 2023.01.11 |