标签: django-storage

使用django-storage和s3boto后端,如何添加缓存信息以请求图像的标题,以便浏览器缓存图像?

我使用的是s3boto后端,而不是s3后端.

django- storages 文档中,它表示要在settings.py文件中指定AWS_HEADERS变量:

AWS_HEADERS(可选)

如果您要设置随存储的每个文件发送的标头:

# see http://developer.yahoo.com/performance/rules.html#expires
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2010 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}
Run Code Online (Sandbox Code Playgroud)

这不适合我.

这是我的模型:

class Photo(models.Model):
    """
        docstring for Photo
        represents a single photo.. a photo can have many things associated to it like
        a project, a portfolio, etc...
    """

    def image_upload_to(instance, filename):
        today = datetime.datetime.today()
        return 'user_uploads/%s/%s/%s/%s/%s/%s/original/%s' % (instance.owner.username, today.year, today.month, today.day, today.hour, today.minute, filename)

    def thumb_upload_to(instance, filename):
        today = datetime.datetime.today()
        return 'user_uploads/%s/%s/%s/%s/%s/%s/thumb/%s' % (instance.owner.username, today.year, today.month, …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 boto django-storage

13
推荐指数
1
解决办法
4289
查看次数

使用带有S3boto后端的django-storages保存到S3时,如何设置"Content-Type"?

我使用django-storagess3boto作为后端.

我有一个带有两个文件夹的存储桶 - 一个用于static,一个用于media.我用它来实现这一点django-s3-folder-storage.

除了使用模型保存到S3之外,我还想实现图像调整大小和缓存功能以将文件保存到S3.为此,我直接与我的S3存储桶进行交互.代码有效,但未Content-Type在S3上设置.

在iPython中:

In [2]: from s3_folder_storage.s3 import DefaultStorage

In [3]: s3media = DefaultStorage()

In [4]: s3media
Out[4]: <s3_folder_storage.s3.DefaultStorage at 0x4788780>
Run Code Online (Sandbox Code Playgroud)

测试我们正在访问正确的存储桶 - storage_test我之前创建的是:

In [5]: s3media.exists('storage_test')
Out[5]: True

In [6]: s3media.open("test.txt", "w")
Out[6]: <S3BotoStorageFile: test.txt>

In [7]: test = s3media.open("test.txt", "w")

In [8]: test
Out[8]: <S3BotoStorageFile: test.txt>

In [9]: test.key.content_type = "text/plain"

In [10]: test.write("...")

In [11]: test.close()

In [12]: test = s3media.open("test.txt", …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 boto django-storage

13
推荐指数
1
解决办法
1701
查看次数

django-storage对s3 IAM用户有什么权限?

正如问题所示,锁定的s3 IAM用户成功使用django-storages所需的最低权限是多少?目前我用过类似的东西

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListAllMyBuckets"],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket",
                 "s3:GetBucketLocation",
                 "s3:ListBucketMultipartUploads",
                 "s3:ListBucketVersions"],
      "Resource": "arn:aws:s3:::bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:*Object*",
                 "s3:ListMultipartUploadParts",
                 "s3:AbortMultipartUpload"],
      "Resource": "arn:aws:s3:::bucket-name/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这可能实际上是矫枉过正.还有什么想法?

django amazon-s3 django-storage amazon-iam

12
推荐指数
1
解决办法
2391
查看次数

Git神秘地删除东西(编辑:实际上是django-storages)

问题:有时,但不是每次,Git都会删除static回购目录.我们不确定是什么触发它,但它似乎发生在分支之间合并或有时甚至只是检查分支.它没有询问就这样做,并且吃掉跟踪的文件.

的背景:

  • 我有一个(私人)项目,有一些分支,'发布','开发',多个功能线.
  • 我们有两个人(我和@stevejalim)正在处理回购.这个问题发生在我们俩身上.
  • 我纯粹使用git命令的命令行; 史蒂夫正在使用命令行和Git Tower的混合物.
  • 这是一个带有static目录的Django项目.我们可能在过去的某个时刻git rm编辑了static目录,或者将其放入.gitignore,但不是最近.而我们的开发分支的负责人并没有static.gitignore和具有文件static跟踪.
  • 这种情况很少发生,以至于我们不确定这是我们正在做的事情,还是间歇性问题,Git的错误或损坏的树
  • 可能只在将另一个分支合并回来时才会发生develop.但是分支总是从分支develop到分支develop.但我们不确定.
  • 我们正在使用git-flow,但是在使用非git-flow命令时也会出现问题.

  • 作为何时可以攻击的例子:

    1)史蒂夫有一个干净的开发分支(没有改变提交或阶段)和稳定.他git flow release start|finish在流程中切换了一个新版本(可能是从master到back的合并),整个/ static/tree被删除了.

    2)Steve通过丢弃更改来修复删除(基本上取消删除文件).然后,史蒂夫只是从主人回到开发,而/ static/dir再次被摧毁(这与Git Tower有关)

    3)有时只是从功能分支合并到开发作为临时合并可以触发它.但是,在切割新版本时,它似乎确实发生了

它可能与我们如何修复/ static/dir的切换有关吗?批量取消删除已删除的内容的最佳方法是什么?抛弃局部变化或硬重置HEAD似乎都无法治愈.一个rebase可能帮助我们?

更新我们刚刚再次体验过这一点git add .- 没有变化的分支,没有合并.这有助于诊断吗?

以下是Steve的.git/config的内容:

[core]
   repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = …
Run Code Online (Sandbox Code Playgroud)

git django amazon-s3 django-storage git-branch

11
推荐指数
1
解决办法
382
查看次数

将静态文件存储在S3上,但staticfiles.json在本地显示

我有一个在Heroku上运行的Django应用程序.为了存储和提供我的静态文件,我将django-storage与我的S3存储桶以及标准的Django一起使用ManifestFilesMixin.我也在使用django-pipeline.

在代码中:

from django.contrib.staticfiles.storage import ManifestFilesMixin
from storages.backends.s3boto import S3BotoStorage
from pipeline.storage import PipelineMixin

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    pass
Run Code Online (Sandbox Code Playgroud)

设置有效,但staticfiles.json清单存储在S3上.我可以看到两个问题:

  1. 我的应用程序的存储实例必须staticfiles.json从S3 获取,而不是仅从本地文件系统获取它.这在性能方面毫无意义.清单文件的唯一使用者是服务器应用程序本身,因此它也可以存储在本地文件系统而不是远程.

    我不确定这个问题有多重要,因为我想(或希望)服务器应用程序在读取一次后缓存该文件.

  2. 清单文件是部署期间编写的collectstatic,因此,如果任何已运行的服务器应用程序版本的实例在部署完成之前从S3读取清单文件并且新的slug接管,则它们可能会获取错误的静态文件 -只应该为新的slug实例提供服务.

    请注意,特别是在Heroku上,新的应用程序实例可能会动态弹出,因此即使应用程序确实缓存了清单文件,它的第一次获取也可能是在部署新的slug期间.

    所描述的场景特定于Heroku,但我想其他环境会出现类似的问题.

显而易见的解决方案是将清单文件存储在本地文件系统上.每个slug都有自己的清单文件,性能最佳,并且不会有如上所述的任何部署比赛.

可能吗?

python deployment django amazon-s3 django-storage

11
推荐指数
2
解决办法
888
查看次数

来自Heroku的Django collectstatic每次都会推送到S3

我正在使用django-storages来获取带有S3(和S3BotoStorage)的静态文件.当我从本地计算机执行collectstatic时,行为与预期一致,只有修改过的文件被推送到S3.此过程需要python-dateutils 1.5来检查修改时间.

但是,在Heroku上执行相同操作会导致每个文件都被推送,尽管设置是相同的.然后我查看了Heroku本身文件的修改时间,看起来,os.stat(static_filename).st_mtime与上次推送的时间相同.

这是预期的行为吗?即使git没有变化,heroku还能复制文件吗?

django heroku django-storage

10
推荐指数
3
解决办法
3935
查看次数

Django存储s3媒体网址是https://而不是http://

使用django-storage s3提供媒体时,正在生成的媒体网址如下所示:

https://mybucket.s3.amazonaws.com/myimage.jpg?Signature=5ifoyLqzmtfVNS1ovfzVvN92RH0%3D&Expires=1363124819&AWSAccessKeyId=AKIAJ7ZTU7K4SPYKGOFA
Run Code Online (Sandbox Code Playgroud)

由于https导致图像无法显示:

    You attempted to reach mybucket.s3.amazonaws.com,
 but instead you actually reached a server identifying itself as *.s3.amazonaws.com.
 This may be caused by a misconfiguration on the server or by something more serious. An attacker on your network could be trying to get you to visit a fake (and potentially harmful) version of mybucket.s3.amazonaws.com.
Run Code Online (Sandbox Code Playgroud)

我需要将图像作为HTTP而不是HTTPS提供

我的设置是:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = "AKIAJ....K4SPYKGOFA"
AWS_SECRET_ACCESS_KEY = "2Y7G98JoCRzAEp....rPoCjWZuwDaQ"
AWS_STORAGE_BUCKET_NAME = "mybucket"
Run Code Online (Sandbox Code Playgroud)

我尝试将media_url和s3_url设置为普通的http,但它没有改变任何东西.

我正在使用django 1.5

django amazon-s3 django-storage

10
推荐指数
2
解决办法
4712
查看次数

Django - 导入storages.backends时出错

我创建了一个自定义存储后端,该文件被调用storages.py并放置在一个名为的应用程序中core:

from django.conf import settings
from storages.backends.s3boto import S3BotoStorage

class S3StaticBucket(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket_name'] = getattr(settings, 'static.mysite.com')
        super(S3BotoStorage, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

settings.py,我有以下内容:

STATICFILES_STORAGE = 'core.storages.S3StaticBucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做python manage.py collectstatic时显示以下错误:

django.core.exceptions.ImproperlyConfigured: Error importing storage module core.storages: "No module named backends.s3boto"
Run Code Online (Sandbox Code Playgroud)

当我运行python manage.py shell并尝试导入相同的:

>>> 
>>> from django.conf import settings
>>> from storages.backends.s3boto import S3BotoStorage
>>> 
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

django django-storage

9
推荐指数
2
解决办法
5316
查看次数

django-storages + sorl_thumbnail + S3不能很好地协同工作(URL不匹配)

我正在使用django-storage和sorl_thumbnail,我正在使用Amazon S3来获取静态和媒体文件.我使用一个带2个文件夹的存储桶,1个用于静态,1个用于媒体.

这是我的配置:

MEDIA_ROOT = '/media/'
MEDIA_URL = 'https://s3.amazonaws.com/my-bucket/media/'
STATIC_ROOT = '/static/'
STATIC_URL = 'https://s3.amazonaws.com/my-bucket/static/'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
DEFAULT_FILE_STORAGE = 'my_lib.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'my_lib.s3utils.StaticRootS3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

MediaRootS3BotoStorageStaticRootS3BotoStorage定义如下:

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
Run Code Online (Sandbox Code Playgroud)

当我使用sorl_thumbnail时,生成的缩略图位于右侧目录中:https://s3.amazonaws.com/my-bucket/media/cache但是当sorl_thumbnail尝试检索已存在的缩略图时,生成的URL为:https://s3.amazonaws.com/my-bucket/cache,您会注意到该media文件夹被省略.

你知道我怎么能解决这个问题吗?

我知道我可以使用django-storages并将我的静态和媒体文件全部混合在我的桶中,但这对我来说有点太脏了:)

谢谢!

django amazon-s3 boto sorl-thumbnail django-storage

9
推荐指数
2
解决办法
2740
查看次数

使用 Django 存储删除 Amazon S3 中的文件

在我的 Django 项目中,我使用 Django-storageS 将媒体文件保存在我的 Amazon S3 中。

我遵循了本教程(我也使用了 Django-rest-framework)。这对我很有效:我可以上传一些图片,并且可以在我的 S3 存储中看到这些图片。

但是,如果我尝试删除我的模型的一个实例(包含 ImageField),这不会删除 S3 中的相应文件。这是正确的吗?我也不需要删除 S3 中的资源。

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

9
推荐指数
2
解决办法
4263
查看次数