https://wgtech.github.io/posts/2019/05/22/Make-Python-3-Virtualenv-Anaconda/ 참고하여 가상 환경 생성
pip install uvicorn
pip install fastapi
pip install boto3
# 기타 등등
https://aws.amazon.com/ko/ 링크로 접속
우측 상단의 “AWS 계정 생성” 클릭 + https://securityspecialist.tistory.com/117 참고하여 하라는 대로 회원가입 잘 해주시면 됩니다!
비자 카드나 마스터 카드가 필요(100원 결제됨 + 회원가입 완료 시 다시 100원 돌려받음)
메인 홈페이지에서 서비스 → 스토리지 → s3 클릭한 뒤, 버킷 생성
버킷 만들고 버킷 정책까지 편집해야 합니다. https://velog.io/@jinseoit/AWS-S3-bucket 참고
https://docs.aws.amazon.com/ko_kr/powershell/latest/userguide/pstools-appendix-sign-up.html 를 참고하여 계정 액세스 키 ID와 보안 액세스 키를 얻습니다.
from typing import List
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
import uvicorn
import boto3
from botocore.exceptions import ClientError
from pathlib import Path
app = FastAPI()
client_s3 = boto3.client('s3',
# 본인의 key_id가 1234면 아래 코드 부분을 aws_access_key_id 를 "1234"로 바꿔야 한다.
aws_access_key_id = "AKIA5ZOU5W7XFAQWFNOQ",
aws_secret_access_key = "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"
)
# 아래 부분도 본인의 버킷 이름으로 수정하면 됩니다.
bucket = 'boostcampmedic'
@app.post("/uploadfiles")
def upload_files(files : List[UploadFile] = File(...)):
file_name = files[0].filename
try:
client_s3.upload_file(
file_name,
bucket,
f"{Path(file_name).stem}.jpg"
)
except ClientError as e :
print(f'Credential error => {e}')
except Exception as e :
print(f"Another error => {e}")
@app.post("/downloadfiles/")
def download_files(filename : str):
try:
client_s3.download_file(
bucket,
f"{filename}.jpg"
f"{filename}.jpg"
)
except ClientError as e :
print(f'Credential error => {e}')
except Exception as e :
print(f"Another error => {e}")
@app.get("/")
def main():
content = """
<body>
<form action="/uploadfiles/" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit" value = "파일 업로드">
</form>
<form action="/uploadfiles/" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit" value = "파일 업로드">
</form>
<form action="/downloadfiles/" enctype="multipart/form-data" method="post">
<input name="filename" type="text">
<input type="submit" value = "파일 다운로드">
</form>
</body>
"""
return HTMLResponse(content=content)
if __name__ == '__main__' :
uvicorn.run(app, host = "0.0.0.0", port=8000)