-
Boto3 파일 업로드 & 다운로드- upload and downloadServer Side/AWS 2020. 1. 15. 00:31
Boto3에 대한 추가 정리 - Notion
upload_file - AWS
# AWS에서 제공하는 usage import boto3 s3 = boto3.resource('s3') s3.meta.client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')
import boto3 import os BASE_DIR = os.getcwd() IMAGE_DIR = os.path.join(BASE_DIR, 'images') AWS_ACCESS_KEY_ID = "[access key]" AWS_SECRET_ACCESS_KEY = "[secret key]" AWS_DEFAULT_REGION = "ap-northeast-2" AWS_BUCKET_NAME = "aws-jihoon-testserver" client = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION ) s3 = boto3.resource('s3') buckets = s3.Bucket(name=AWS_BUCKET_NAME) file_path = os.path.join(IMAGE_DIR, 'macbookpro.png') # 저장될 데이터의 이름 -> key로 사용 key_name = "mcpro.png" # upload_file(image파일 주소, 저장될 파일 이름) # buckets.upload_file(file_path, 'mcpro.png') with open(file_path, 'rb') as data: buckets.upload_file(data.name, 'mcpro.png')
upload를 위해 Object level 정책 추가
- *(asterisk)를 이용해 Object 관련 모든 접근을 허용
{ "Effect": "Allow", "Action": [ "s3:*Object*" ], "Resource": [ "arn:aws:s3:::aws-jihoon-testserver/*" ] },
ACL(Access Control List) 권한을 파일 업로드에 추가하여 전송할 경우 파일에 접근할 수 있다. (웹에서 열리지 않고 자동으로 다운로드 실행 됨)
buckets.upload_file(file_path, "mcpro.png", ExtraArgs={'ACL': 'public-read'})
upload_file vs put_object(두 메서드 모두 기능은 유사함)
upload_file method: S3 Transfer Manager에 의해 처리됨, 매니저에 의해서 필요한 경우 자동으로 파일(multipart) upload 처리
put_object method: low-level S3 API 요청에 매핑됨. 파일 upload를 처리하지 않으며(upload_file과 다른 방식으로 upload를 처리? body에 올라간 image 정보를 전송한다는 의미?? - 자료 조사중) 한번의 요청으로 body 전체를 전송 하려함 + low-level 속성을 컨트롤 할 수 있음(CacheControl-cache관련, ContentMD5-파일 손상 방지 등..)
download_file - AWS
# AWS usage import boto3 s3 = boto3.resource('s3') s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
from conf import IMAGE_DIR, buckets import os # local에 저장할 주소와 파일 이름 지정 file_path = os.path.join(IMAGE_DIR, 'mcpro_down.png') # S3에 등록된 파일 이름 key_name = "1.png" # buckets.download(<key>, <path>) buckets.download_file(key_name, file_path)
generate_presigned_url: 다운로드를 허용할 수 있는 url 생성 - AWS
def get_s3_client(): s3 = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION ) return s3 s3 = get_s3_client() url = s3.generate_presigned_url( ClientMethod='get_object', Params={ 'Bucket': AWS_BUCKET_NAME, 'Key': key_name, }, # url 생성 후 10초가 지나면 접근 불가 ExpiresIn=datetime.timedelta(seconds=10) ) print(url)
- 해당 파일의 접근에 대한 유효기간을 설정할 수 있다.
- Onlineshop에서 digital 제품을 판매할 때 이용될 수 있다.
'Server Side > AWS' 카테고리의 다른 글
Boto3 - 기본 설정 및 사용법 (1) 2020.01.13 AWS Setting - EC2 (0) 2020.01.13