我有一个关于客户端上传(在这种情况下是iPhone应用程序)到S3的普遍问题。我正在使用Django在EC2实例上编写Web服务。以下方法是将文件上传到S3的最少要求,对于较小的文件(jpg或png < 1 MB),它非常有效:
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的章节,但因为它只有代码示例,所以并没有真正回答我的问题。