클라이언트 (이 경우 iPhone 앱)에서 S3으로 업로드하는 것과 관련하여 일반적인 질문이 있습니다. 장고를 사용하여 EC2 인스턴스에서 내 웹 서비스를 작성합니다. 다음 방법은 S3에 파일을 업로드 할 수있는 최소한이며 작은 파일 (JPG를 또는 PNG 파일 < 1메가바이트)와 아주 잘 작동 :이미지 업로드 : iPhone 클라이언트 - Django - S3
def store_in_s3(filename, content):
conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY) # gets access key and pass key from settings.py
bucket = conn.create_bucket('somebucket')
k = Key(bucket) # create key on this bucket
k.key = filename
mime = mimetypes.guess_type(filename)[0]
k.set_metadata('Content-Type', mime)
k.set_contents_from_string(content)
k.set_acl('public-read')
def uploadimage(request, name):
if request.method == 'PUT':
store_in_s3(name,request.raw_post_data)
return HttpResponse("Uploading raw data to S3 ...")
else:
return HttpResponse("Upload not successful!")
나는이 모든 아주 새로운, 그래서 아직도 여기서 일어나는 일을 이해하지 못한다. 그 경우입니까 :
- Django가 파일을 받아 내 EC2 인스턴스의 메모리에 저장합니까?
- 메모리 문제를 피하기 위해 raw_post_data를 사용하지 않고 청크를 사용해야합니까?
- Django가 파일을 받으면 파일을 store_in_s3 함수로 전달합니까?
- S3 로의 업로드가 성공적 이었는지 어떻게 알 수 있습니까?
그래서 일반적으로 내 코드 한 줄이 다른 코드 뒤에 실행되는지 궁금합니다. 예 : 언제 return HttpResponse("Uploading raw data to S3 ...")
화재? 파일이 아직 업로드 중이거나 성공적으로 업로드 된 후에?
도움 주셔서 감사합니다. 또한이 주제를 다루는 모든 문서에 감사드립니다. O'Reilly의 Python & AWS Cookbook에서 챕터를 살펴 봤지만 코드 예제 일 뿐이므로 실제로는 내 질문에 답하지 않습니다.
감사합니다. 정말 도움이됩니다. 방금 다른 게시물 몇 개를 확인한 결과 클라이언트 (iPhone)의 콘텐츠를 S3에 직접 업로드하는 것이 가장 좋은 해결책 인 것처럼 보입니다. 이렇게하면 서버가 바로 연결되며 트래픽을 두 배로 늘릴 수 있습니다 (예 : EC2/Django에 처음 업로드 한 다음 S3에 업로드). –
업로드 한 이미지를 처리하는 경우에만주의해야합니다. 내 사업에서 각 이미지는 Django 서버에서 다양한 크기로 크기가 조정 된 다음 각 이미지가 CDN에 업로드됩니다. 단지 예일 뿐이므로 자신의 앱을 염두에 두어야합니다. – Jordan
알겠습니다. 따라서 서버에서 이미지 처리를 수행하지 않으면 클라이언트 -> S3로 직접 이동할 수 있습니다. 처리가 필요한 경우 Django 서버를 통해 이동합니다. 다시 한 번 고마워, 이것은 정말로 도움이되었다. –