Files served unbearably slow from amazon s3

旧城冷巷雨未停 提交于 2019-12-03 16:38:33

Here is how I do it - It does not feel slow to me:

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)

My individual users or groups of users have designated buckets referenced in the profile object. AWS Credentials stored in settings.py.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!