2012-07-21 9 views
18

Las URL en miniatura tienen parámetros en ellas. No estoy seguro por qué. Creo que están relacionados con el almacenamiento sorl-thumbnail o boto que estamos usando. ¿Cómo elimino los parámetros adicionales de la URL? Vienen de boto/s3 o sorl. No tengo idea de cómo depurar.Firma/Vencimiento/ID de clave de acceso que aparece en URL Params. Django/Boto/S3

+0

¿Puedes pegar aquí un ejemplo de la URL? – Keshi

+0

Aquí hay un ejemplo: https://eniyiyorumlar.s3.amazonaws.com/media/product_photos/yuruyus-bandi/dynamic-v100.jpg?Signature=4C45X28vHf07rkVXj4hvqxAxTeg%3D&Expires=1342920217&AWSAccessKeyId=AKIAJIDT4T4CVUPDP7RQ - viene del boto, no lo hago uso sorl y obtengo el mismo resultado. Tiene la misma pregunta – Intenex

Respuesta

5

Los parámetros adicionales que se están agregando están ahí para implementar Query String Authentication. Esto le permite pre-firmar la URL a los recursos privados almacenados en S3. Mientras alguien tenga la URL firmada previamente (y no haya expirado), podrá acceder a estos recursos aunque no sean legibles públicamente.

Sin los parámetros adicionales, no hay forma de proporcionar acceso público a estos recursos privados S3.

+0

¿por qué los recursos S3 son privados? ¿Cómo los hago públicos? – LILI

+0

Todo el contenido es privado por defecto en S3. Puede cambiarlo a legible de forma pública utilizando el método make_public() del objeto Key en boto o puede usar AWS Console si prefiere usar una GUI. – garnaat

+0

Boto3 no sabe si son privados o no; el valor predeterminado es firmar la URL para que se pueda acceder de cualquier manera. Si son públicos, puede aplicar la configuración para que la firma quede fuera de la URL – r3m0t

58

Uso: AWS_QUERYSTRING_AUTH = False

+18

. Esta respuesta necesita más detalles para ser útil. – rjsvaljean

+4

Está bastante poco documentado, pero esto es lo que realmente necesita. Si su depósito es públicamente visible para todos (lo que quiere para los medios), esto elimina los parámetros de autenticación. – Alper

2

funciona para mí: AWS_QUERYSTRING_AUTH = False

usar este https://github.com/mstarinteractive/django-s3storage

from myapp.s3storage import S3BotoStorage 
from django.contrib.staticfiles.storage import CachedFilesMixin 


class CachedStaticS3BotoStorage(CachedFilesMixin, S3BotoStorage): 

    """Extends S3BotoStorage to save static files with hashed filenames.""" 
    pass 
StaticRootS3BotoStorage = lambda: CachedStaticS3BotoStorage(location='static') 
0

Es un comportamiento extraño: Google Docs vista previa va a funcionar y mostrar una vista previa sin los parámetros, pero dirán que no hay vista previa disponible si boto agrega la firma.

<iframe src="{% trans "https://docs.google.com/viewer?embedded=true&amp;url=" %}{{ document.file.url }}" width="451" height="390" style="border: none;"></iframe>

Debo estar perdiendo algo.

Cuestiones relacionadas