标签: sorl-thumbnail

在django上的s3上存储图像和缩略图

我正在尝试使用django-storages,boto和sorl-thumbnail将我的图像缩略图并存储在s3上.我有它工作,但它很慢,即使是小图像.当我保存表单并将图像上传到s3时,我不介意它很慢,但我希望在此之后快速显示图像.

这个SO问题的答案解释了在首次访问之前不会创建缩略图,但您可以使用get_thumbnail()预先创建它.

Django + S3(boto)+ Sorl缩略图:优化建议

我正在这样做,现在似乎所有进入thumbnail_kvstore表的条目都是在上传图像时创建的,而不是在显示时创建的.

问题是显示图像的页面仍然很慢.查看调试工具栏中的日志记录面板,看起来仍然有很多与s3的通信.看起来在上传和缓存图像和缩略图之后,页面应该快速渲染而不与s3通信.

我究竟做错了什么?谢谢!

更新:弱黑客似乎已经使它工作,但我很想知道如何正确地做到这一点:

https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf

更新:@sorl的更多信息

我正在使用2个视图:

添加视图:在此视图中,我提交表单以创建包含图像的模型.图像上传到s3.在post_save信号中,我调用get_thumbnail()在需要之前生成缩略图:

im = get_thumbnail(instance.image, '360x360')
Run Code Online (Sandbox Code Playgroud)

显示视图:在此视图中,我显示添加视图中生成的缩略图:

    {% thumbnail object.image "360x360" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
    {% endthumbnail %}
Run Code Online (Sandbox Code Playgroud)

没有补丁:

添加视图:在kvstore表中创建3个条目,访问缓存10次(6组,4个获取),调试工具栏的日志选项卡显示"建立HTTP连接"12次

显示视图:kvstore表中只有3个条目,只有1个来自缓存,但是调试工具栏仍然说"建立HTTP连接"3次

只有第122行的更改:

添加视图:与上面相同,除了日志记录只显示"建立HTTP连接"2次DISPLAY VIEW:与上面相同,除了日志记录只显示"建立HTTP连接"1次

还在第118行添加更改:

添加视图:与上面相同,但现在我们只有2个"建立HTTP连接"消息DISPLAY VIEW:与上面相同,根本没有记录消息

更新:看起来像storage._setup()被调用两次,而storage.url()被调用一次.根据时间,我会说每个人都与s3建立联系:

1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66
Run Code Online (Sandbox Code Playgroud)

这似乎反映在boto日志中,它说"建立HTTP连接"3次.

django amazon-s3 boto sorl-thumbnail django-storage

21
推荐指数
1
解决办法
7730
查看次数

表thumbnail_kvstore不存在

我无法在模板中显示缩略图.我收到此错误:

django.db.utils.ProgrammingError:(1146,"表'ia_website.thumbnail_kvstore'不存在")

  • 已安装sorl_thumbnail-12.3
  • 我正在使用MariaDB 10.1.11
  • 我没有没有执行的迁移
  • 如果我不使用'thumbnail'标签,我可以看到图像

这就是我做的

python django sorl-thumbnail

20
推荐指数
2
解决办法
5865
查看次数

Django + S3(boto)+ Sorl缩略图:优化建议

我正在开发的Django站点上使用S3存储后端,既可以减少来自EC2服务器的负载,又可以允许多个Web服务器(冗余,负载平衡)访问同一组上传的媒体.

Sorl.thumbnail(v11)模板标签正在我们的模板中使用,以允许灵活的图像大小调整/裁剪.

富媒体页面上的性能不是很好,当访问需要首次生成缩略图的页面时,请求甚至会超时.

我知道这是由于sorl缩略图检查/从S3下载原始图像(可能是非常大和高分辨率),以及渲染/检查/上传缩略图.

你会建议这个设置的最佳解决方案是什么?

除了S3副本之外,我已经看到了存储文件本地副本的建议(当一些服务器用于负载平衡时,这种建议并不好).我也看到它建议存储0字节文件来欺骗sorl.thumbnail.

是否还有其他建议或更好的方法来解决这个问题?

django thumbnails amazon-s3 boto sorl-thumbnail

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

Django:同一个项目中的sorl-thumbnail和easy-thumbnail

我正在开发和使用两个独立的模块化Django应用程序的项目.但是,一个应用程序需要简单的缩略图,另一个需要索引缩略图.不幸的是,这两个缩略图库使用了模板标记语法{%load thumbnail%},因此当使用它们的模板尝试渲染时,它们会发生冲突和中断.

有没有办法解决这种类型的冲突?(例如,模板选项会影响{%load thumbnail as easy_thumbnail%}).我是否必须分叉其中一个应用程序并将其中一个缩略图库替换为另一个?如果是这样,我应该选择哪个?

谢谢你考虑我的问题,乔

django templates image thumbnails sorl-thumbnail

12
推荐指数
3
解决办法
2775
查看次数

如何缩略图静态文件?

我想用sorl缩略图调整我的静态文件,但它不起作用

这是我的代码

{% if not new.photo %}

{% with path="{{STATIC_URL}}/images/empty-news.jpg" %}
{% thumbnail path "80x80" crop="center" as im %}
<a href="#" class="image"><img alt="" src="{{im.url}}" class="frame2"></a>
{% endthumbnail %}
{% endwith %}

{% else %}
{% thumbnail new.photo "80x80" crop="center" as im %}
<a href="{% url news_detail new.slug %}" class="image">
<img alt="" src="{{im.url}}" class="frame2"></a>
{% endthumbnail %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

如果我有图像它显示图像,但当我没有图像我不能使用默认图像,因为缩略图不起作用

django django-templates sorl-thumbnail

12
推荐指数
2
解决办法
5676
查看次数

错误的网址与Django Sorl缩略图与亚马逊s3

我在我的django项目中使用sorl缩略图时出现了一个非常奇怪的错误,该项目使用S3作为媒体文件.我已按照此答案/sf/answers/899405531/中的指示完成了我的设置,实际上所有其他媒体文件都是正确生成的.

但对于通过sorl缩略图生成的图像,我得到了这样的网址

https://he-s3.s3.amazonaws.com/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg?Signature=tgDEXyRV3gl3QtK%2BvwliqAtWqpM%3D&Expires=1357853609&AWSAccessKeyId=AKIAJLE6MUHDYS3HN6YQ

这个问题很奇怪,因为它将S3存储路径附加到图像网址,但它之间没有添加/ media /.如果你检查

https://he-s3.s3.amazonaws.com/media/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg

图像实际上存在于那里,但由于网址生成错误,我得到了一个破碎的图像.在设置文件中,我使用s3boto声明了DEFAULT_FILE_STORAGE并且它包含

S3_URL = 'http://he-s3.s3-website-ap-southeast-1.amazonaws.com'
MEDIA_URL = S3_URL + '/media/'
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么sorl缩略图中的路径不包含媒体.

任何帮助表示赞赏.

更新

事实上,这个问题并没有得到解决.我做的是我清除了缩略图中的KVStore并清除了所有数据库.我很高兴,因为我认为问题已经解决,我现在正在获得正确的网址.但后来我刷新了页面,我又弄错了网址.我不明白发生了什么,如果我清除了缩略图db,它会显示一次正确的url,然后再次显示错误的url.

django amazon-s3 sorl-thumbnail

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

django - 关于sorl-thumbnail的事情

我正在使用sorl-thumbnail为我的项目创建缩略图.我只在模板中实现它,而不是在模型或视图中实现它.每个缩略图都与原始图像相关联,这些图像由灯箱使用.作为一个新手,我想知道它的一些功能:

  1. 是否只在它中实现它template是相同的,如在它中使用它modelsview为每个创建一个新的缩略图?
  2. 如何为不同的图像配置不同的缩略图,因为它可以在easy_thumbnail
  3. 如何覆盖默认值,例如:覆盖值Quality等.

最后,它是一种正确的实施方式吗?任何建议或建议将不胜感激.谢谢.

HTML:

{% for photo in photos %}
    <div class="thumbnail_container">
        <a href="{{MEDIA_URL}}{{photo.image}}" class="gallery" title="{{photo.title}}">
            {% thumbnail photo.image "200x200" as im %}
                <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"  class="thumbnail">
            {% endthumbnail %}
        </a>
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

编辑:

如何为sorl-thumbnails创建这样的东西,这可以通过简单的缩略图来完成:

settings.py

THUMBNAIL_ALIASES = {
    '': {
        'avatar': {'size': (100,100), 'crop': True},
        'forum': {'size': (203,103), 'crop':False},
    },
}
Run Code Online (Sandbox Code Playgroud)

然后在模板中我可以从settings.py中定义的别名中选择:

<img src="/static/{{forum.image |thumbnail_url:'forum' }}">
Run Code Online (Sandbox Code Playgroud)

要么

<img …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-models django-views sorl-thumbnail

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

使用带有远程存储的sorl-thumbnails芹菜的指针?

我很惊讶在搜索如何使用sorl-thumbnails和S3的芹菜任务时,除了"使用芹菜"之外什么都没看到.

问题:使用远程存储导致生成缩略图时出现大量延迟(对于包含许多缩略图的页面,请考虑100s +),而缩略图引擎从远程存储下载原始文件,对其进行处理,然后上传回s3.

在sorl内建立芹菜任务的好地方在哪里,我该怎么称呼?

任何您的经验/想法将不胜感激.

我将开始在Sorl内部挖掘,找到一个更有用的地方来推迟这项任务,但是如果以前已经解决了这个问题还有一些我很好奇的事情.

  1. 什么图像立即返回?必须以某种方式告诉Sorl返回的图像不是真正的缩略图.当celery完成任务时,缓存必须无效.

  2. 干净地处理多个缩略图生成请求(仅需要给定缓存键的第一个)

就目前而言,我暂时通过使用nginx反向代理缓存来解决这个问题,该缓存可以提供命中,同时后端花费时间生成昂贵的页面(在巨大的产品网格上调整大型PNG的大小),但这是一个非常手动的过程.

python django amazon-s3 sorl-thumbnail celery

10
推荐指数
1
解决办法
1272
查看次数

如何使用sorl-thumbnail调整源大小?

我正在网上搜索我的问题,但无论如何也找不到明确的答案者.

基本上,我想使用sorl并希望在模型保存时间内调整源图像的大小以将其大小调整为640x480大小,这样我就不会最终在磁盘上存储用户原始的2.5 MB文件.然后我将使用templatetags从我的源代码中创建常规缩略图,如sorl中所述.

我遇到了几个来源引用使用的ThumbnailField模型字段应该在sorl.thumbnail.fields中可用.请点击此处链接.但是,在我从主干中获取最新的sorl副本时,我看不到任何ThumbnailField或ImageWithThumbnailsField.我在模型中导入它的尝试失败了.我看到这些参考文献虽然陈旧但想知道我是否可以用最新的sorl实现相同的目标.

另一方面,sorl文档仅指示来自sorl.thumbnail(参见此处)的ImageField ,它没有任何大小参数来控制源大小调整.

顺便说一下,我看到easy_thumbnail提供了这个功能,它带有一个输入参数source_resize.

任何帮助将不胜感激!

摘要

我接受了下面的答案,但我觉得对这个用例的自然索引支持非常有用 - 即将resize_source参数添加到sorl的ImageField以允许调整源图像的大小.以下是为什么它在该领域有用的两个因素:

  1. 如果您的应用程序不需要它,则不要存储用户的巨大原始图像.节省磁盘空间.

  2. 如果您没有特定的极高质量原因,请不要花费额外的CPU来重新调整来自巨大源图像的缩略图.为了避免这种情况,可以将模板中的嵌套标签写入较小尺寸图像的缩略图中,但它很快就会变得烦人.

django thumbnails image-resizing sorl-thumbnail

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

覆盖保存方法 - 'ImageFile'对象没有属性'_committed'

我重写了如下所示的save方法,以及get_thumbnails并使用sorl保存..

但得到错误 'ImageFile' object has no attribute '_committed'

class HotelPhotos(models.Model):
    hotel = models.ForeignKey(Hotel, related_name='photos')
    code = models.CharField(max_length=255)
    original = models.ImageField(upload_to="media")
    medium = models.ImageField(upload_to="media", null=True, editable=False)
    thumbnail = models.ImageField(upload_to="media", null=True, editable=False)

    def save(self, *args, **kwargs):

        super(HotelPhotos, self).save(*args, **kwargs)
        self.medium = get_thumbnail(self.original,
                                    '100x100',
                                    crop='center',
                                    quality=99)

        self.thumbnail = get_thumbnail(self.original,
                                       '50x50',
                                       crop='center',
                                       quality=99)

        super(HotelPhotos, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

django django-models sorl-thumbnail

9
推荐指数
1
解决办法
7971
查看次数