我是这样做的 - 对我来说感觉不是很慢:
models.py:
class Document(models.Model):
id = UUIDField(primary_key = True)
extension = models.CharField(max_length = 5)
created_on = CreationDateTimeField()
labels = models.ManyToManyField(Label)
def url(self, bucket):
url = get_s3_url(bucket, '' + str(self.id) + str(self.extension) + '')
return 'https' + url[4:]
views.py:
import urllib2
@login_required
def view(request, document_id):
document = Document.objects.get(id = document_id)
response_file = urllib2.urlopen(document.url(request.user.profile.aws_documents_bucket_name))
response = HttpResponse(response_file.read(), mimetype = document.mimetype)
response['Content-Disposition'] = 'inline; filename=' + str(document.id) + document.extension
return response
utils.py:
from boto.s3.connection import S3Connection
from boto.s3.key import Key
from django.conf import settings
def get_s3_url(bucket, filename):
s3 = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
key = s3.create_bucket(bucket).get_key('' + filename + '')
return key.generate_url(3600, "GET", None, True, True) # This gives an authenticated url available for only a short time period (by design)
我的个人用户或用户组已在配置文件对象中引用了指定的存储桶 . AWS凭证存储在settings.py中 .