标签: django-storage

在django应用程序上使用django-storage时如何获取存储在amazon s3上的图像304?

我刚开始在亚马逊的S3上存储用户上传的图像.它非常好,因为它解决了我的存储问题.但是,当涉及到浏览器缓存图像时,我正在努力.

我正在使用django-storage.在他们的文档中,他们指定您可以通过在设置中设置AWS_HEADER var将事物放在图像的请求标头上.我这样做并没有结果.

基本上当应用程序请求图像时,我每次都会得到200个.ARG ...当我直接将浏览器带到图像(将链接复制并粘贴到新窗口)时,我每次都会得到200,然后是304.

这非常令人沮丧,因为它每次都会重新下载图像.有些页面上最多有25个小缩略图,每次重新加载页面时都会重新加载所有内容.

我使用djangos staticfiles提供我的静态文件,它们正常工作.缓存文件后,我得到200,然后是304.

这是我在settings.py中的AWS设置

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = '***'
AWS_SECRET_ACCESS_KEY = '***'
AWS_STORAGE_BUCKET_NAME = 'foobar_uploads'
AWS_HEADERS = {
    'Expires': 'Thu, 15 Apr 2020 20:00:00 GMT',
    'Cache-Control': 'max-age=86400',
}

AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN
Run Code Online (Sandbox Code Playgroud)

这里是应用程序请求图像时的请求和响应标题:(我用" * " 替换了我认为可能是敏感信息的内容)

##request##
GET /user_uploads/*****/2012/3/17/14/46/thumb_a_28_DSC_0472.jpg?Signature=FVR6T%2BXFwHMmdQ9K3n7Ppp7QxoY%3D&Expires=1332023525&AWSAccessKeyId=***** HTTP/1.1
Host: *****_user_uploads_sandbox.s3.amazonaws.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: */*
Referer: http://localhost:8000/m/my-photos/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


##response##
HTTP/1.1 200 OK
x-amz-id-2: Hn3S+3gmeLHIjKCpz+2ocE6aPsLCVHh56jJYTsPHwxU98y89x+9X1Ml202evBUHT
x-amz-request-id: …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 django-storage

5
推荐指数
1
解决办法
2755
查看次数

带有S3 URL Heroku的Django Compressor

我目前正在使用django压缩器和django存储来运行s3的静态媒体.我的文件如下:

根据文档我的存储空间是:

from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage

class CachedS3BotoStorage(S3BotoStorage):
    """
    S3 storage backend that saves the files locally, too.
    """
    def __init__(self, *args, **kwargs):
        super(CachedS3BotoStorage, self).__init__(*args, **kwargs)
        self.local_storage = get_storage_class(
            "compressor.storage.CompressorFileStorage")()

    def save(self, name, content):
        name = super(CachedS3BotoStorage, self).save(name, content)
        self.local_storage._save(name, content)
        return name
Run Code Online (Sandbox Code Playgroud)

我的设置是:

# S3 Storage Section
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
# AWS_S3_SECURE_URLS = False #turns off https for static files (necessary)

# Used …
Run Code Online (Sandbox Code Playgroud)

django django-storage django-compressor

5
推荐指数
1
解决办法
2015
查看次数

Amazon S3的访问被拒绝错误

我在使用Amazon S3时遇到“拒绝访问”错误,无法弄清原因。

我的设置如下:

STATIC_URL = 'http://s3.amazonaws.com/%s/' % AWS_STORAGE_BUCKET_NAME

什么会导致访问被拒绝错误?我已验证我的密钥正确。

django amazon-s3 boto django-storage

5
推荐指数
1
解决办法
5911
查看次数

使用s3-boto中断浏览器缓存的django-storage

我有一个django项目,它使用django-storage而不是s3-boto.

问题是位于S3上的每个文件都无法缓存,因为每个调用都更改了URL.

这里是django-storage生成的两个调用:

https://my.s3.amazonaws.com/cache/user_6/profile_pic/profile_profile_picture_thumbnail.jpg?Signature=HlVSayUIJj6dMyk%2F4KBtFlz0uJs%3D&Expires=1364418058&AWSAccessKeyId=[awsaccesskey]     
https://my.s3.amazonaws.com/cache/user_6/profile_pic/profile_profile_picture_thumbnail.jpg?Signature=xh2VxKys0pkq7yHpbJmH000wkwg%3D&Expires=1364418110&AWSAccessKeyId=[awsaccesskey]
Run Code Online (Sandbox Code Playgroud)

如您所见,签名是不同的.我该怎么办才不会破坏我的浏览器缓存?

django django-storage

5
推荐指数
2
解决办法
1933
查看次数

无法加载Boto的S3绑定.(已安装Boto)

我正在尝试使用s3来存储用户的上传文件,我使用django存储

pip install django-storages

将它添加到我的INSTALLED_APPS中

INSTALLED_APPS =(

...

"储存",

)

在settings.py中设置变量

DEFAULT_FILE_STORAGE ='storages.backends.s3boto.S3BotoStorage'

AWS_ACCESS_KEY_ID ='#################'

AWS_SECRET_ACCESS_KEY ='#######################'

AWS_STORAGE_BUCKET_NAME ='mybucketname'

我已经安装了boto

sudo pip install boto

dyld:DYLD_环境变量被忽略,因为主可执行文件(/ usr/bin/sudo)是setuid或setgid

要求已经满足(使用--upgrade升级):boto in /Library/Python/2.7/site-packages/boto-2.9.0_dev-py2.7.egg

打扫干净...

当我保存项目时,django的调试页面会跳出来,

无法加载Boto的S3绑定.

请参阅https://github.com/boto/boto

有任何想法吗?(我使用mac os x 10.8.3)

django amazon-s3 django-storage

5
推荐指数
1
解决办法
1239
查看次数

Django亚马逊s3 SuspiciousOperation

因此,当我尝试从浏览器访问S3上的某个图像时,一切正常.但是当python正在做它时,我得到一个SuspiciousOperation错误.我的静态文件夹在S3上是公共的,所以我真的不知道它来自哪里.

Publication.objects.get(id=4039).cover.url
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/vagrant/.pyenv/versions/blook/lib/python2.7/site-packages/django/db/models/fields/files.py", line 64, in _get_url
    return self.storage.url(self.name)
  File "/home/vagrant/.pyenv/versions/blook/lib/python2.7/site-packages/queued_storage/backends.py", line 291, in url
    return self.get_storage(name).url(name)
  File "/home/vagrant/.pyenv/versions/blook/lib/python2.7/site-packages/queued_storage/backends.py", line 115, in get_storage
    elif cache_result is None and self.remote.exists(name):
  File "/home/vagrant/.pyenv/versions/blook/lib/python2.7/site-packages/storages/backends/s3boto.py", line 410, in exists
    name = self._normalize_name(self._clean_name(name))
  File "/home/vagrant/.pyenv/versions/blook/lib/python2.7/site-packages/storages/backends/s3boto.py", line 341, in _normalize_name
    name)
SuspiciousOperation: Attempted access to 'http:/s3-eu-west-1.amazonaws.com/xpto/static/images/default-image.png' denied.
Run Code Online (Sandbox Code Playgroud)

我的设置:

AWS_S3_SECURE_URLS = True  # use http instead of https
S3_URL = 'http://s3-eu-west-1.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 boto amazon-web-services django-storage

5
推荐指数
1
解决办法
1211
查看次数

如何将s3中存在的文件保存到django文件字段

我有两个文件字段的视频模型(存储在亚马逊 s3 中的媒体):

class Video(models.Model):
    original = FileField(storage=S3BotoStorage())
    small = FileField(storage=S3BotoStorage(), null=True)
Run Code Online (Sandbox Code Playgroud)

我只上传原始视频,然后上传后我在亚马逊弹性转码中创建转换作业(并且我为转换文件指定了文件路径)。

@receiver(post_save, sender=Video)
def handle_new_video(sender, instance, created, **kwargs):
    if created:
        send_transcode_job_request(instance.id, 'converted/file.mp4')
Run Code Online (Sandbox Code Playgroud)

作业完成后,我只想将文件路径保存到文件small字段。

@receiver(job_completed, sender=Video)
def handle_converting_completed(video_id, filepath, **kwargs):
    video = Video.objects.get(id=video_id)
    video.small.file.name = filepath
Run Code Online (Sandbox Code Playgroud)

如何在不重新上传视频的情况下执行此操作?

python django amazon-s3 amazon-web-services django-storage

5
推荐指数
0
解决办法
606
查看次数

Collectstatic创建空文件

我正在尝试将应用程序升级到Django 1.11,但是遇到了问题collectstatic

旧版本:

django 1.8.17 
django-storages 1.5.1
Run Code Online (Sandbox Code Playgroud)

新版本:

django 1.11.12
django-storages 1.6.6
Run Code Online (Sandbox Code Playgroud)

存储:

class StaticS3BotoStorage(ManifestFilesMixin, S3BotoStorage):
    location = 'static'
    file_overwrite = True
    preload_metadata = True
Run Code Online (Sandbox Code Playgroud)

要么

class StaticS3BotoStorage(CachedFilesMixin, S3BotoStorage):
    location = 'static'
    file_overwrite = True
    preload_metadata = True
Run Code Online (Sandbox Code Playgroud)

使用旧版本,可以collectstatic很好地工作,包括collectstatic --clear

升级后,collectstatic --clear失败(不删除任何文件)。 collectstatic确实会复制文件,但是有时会创建同一文件的两个版本。在此特定示例中,我得到base.hash1.cssbase.hash2.cssbase.hash2.css为空,因此页面可以打开,但无法正确呈现。

如果我不使用CachedFilesMixinManifestFilesMixin,则collectstatic工作正常,但清除仍然失败。

我测试了django 1.11和django-storages的不同组合,但它们的行为似乎都相同。

有人遇到过类似的问题吗?

python django django-storage

5
推荐指数
1
解决办法
221
查看次数

如何使用 django-storages 和 boto3 获取 aws s3 对象密钥

我使用 django-storage 和 boto3 使用 aws s3 来存储媒体和静态文件。我需要获取 aws s3 存储桶的对象键,以便我可以生成该对象的 url。

client = boto3.client('s3')
bucket_name = 'django-bucket'

key = ???

u = client.generate_presigned_url('get_object', Params = {'Bucket': bucket_name, 'Key': key,'ResponseContentType':'image/jpeg', 'ResponseContentDisposition': 'attachment; filename="your-filename.jpeg"'}, ExpiresIn = 1000)
Run Code Online (Sandbox Code Playgroud)

这些在我的设置中:

STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
STATICFILES_STORAGE = 'myproject.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'myproject.custom_storages.MediaStorage'
AWS_ACCESS_KEY_ID = "my_access_key_id"
AWS_SECRET_ACCESS_KEY = "my_secret_access_key"
AWS_STORAGE_BUCKET_NAME = "django-bucket"
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com"
# static media settings
STATIC_URL = "https://" + AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com/"
MEDIA_URL = STATIC_URL …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 boto django-storage boto3

4
推荐指数
1
解决办法
3901
查看次数

如何在 Django 存储中设置 AWS S3 对象永不过期?

我正在使用django-storage(内部使用 Boto3)上传图像。我能够成功地做到这一点,我得到的返回 URL 是这种格式:

https://.s3.amazonaws.com/foo.jpg?Signature=&AWSAccessKeyId=&Expires=1513089114

其中还填写了 Signature 和 AWSAccessKeyId。

现在,我需要将这个 URL 直接提供给移动开发人员,我不能这么晚设置超时。我需要它很多年或可能总是可以访问。这样做的好方法是什么?解决办法是什么

timeout amazon-s3 django-storage boto3

4
推荐指数
1
解决办法
4562
查看次数