subir archivos django amazon-s3 boto django-staticfiles

django - subir archivos a amazon s3



Archivos servidos insoportablemente lentos desde amazon s3 (1)

Tengo una aplicación django en heroku que sirve los archivos estáticos de Amazon s3 bucket. Utilizo boto library y seguí la guía en el sitio web. ¿Qué puedo hacer para acelerar las transferencias de archivos?

Algunos de los códigos:

DEFAULT_FILE_STORAGE = ''storages.backends.s3boto.S3BotoStorage'' AWS_ACCESS_KEY_ID = ''xxxx'' AWS_SECRET_ACCESS_KEY = ''xxxx'' AWS_STORAGE_BUCKET_NAME = ''boxitwebservicebucket'' STATICFILES_STORAGE = ''storages.backends.s3boto.S3BotoStorage'' STATIC_URL = ''http://'' + AWS_STORAGE_BUCKET_NAME + ''.s3.amazonaws.com/''

la vista

class GetFileContent(View): def get(self,request, userName, pk): user = User.objects.filter(username = userName) filtered = Contentfile.objects.filter(pk = pk, published=True, file_owner = user) data = filtered[0].content filename = filtered[0].title + "." + filtered[0].file_type response = HttpResponse(data, content_type=''application/force-download'') response[''Content-Disposition''] = ''attachment; filename="{}"''.format(filename) return response pass

Sospecho que django está sirviendo el archivo aunque esté en el servidor s3. ¿Cómo puedo dirigir al usuario directamente al enlace s3?


Así es como lo hago - No me parece lento:

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)

Mis usuarios individuales o grupos de usuarios tienen cubos designados a los que se hace referencia en el objeto de perfil. Credenciales de AWS almacenadas en settings.py