asc*_*axi 21 django amazon-s3 boto sorl-thumbnail django-storage
我正在尝试使用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')
显示视图:在此视图中,我显示添加视图中生成的缩略图:
    {% thumbnail object.image "360x360" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
    {% endthumbnail %}
没有补丁:
添加视图:在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
这似乎反映在boto日志中,它说"建立HTTP连接"3次.
作为sorl thumbnail的作者,如果它没有像我预期的那样工作,我真的很有兴趣解决这个问题.如果填充了键值sotre,它将存储:名称,存储和大小.我假设url基于名称,因此不应该导致任何存储调用.看看django存储,https://github.com/e-loue/django-storages/blob/master/storages/backends/s3boto.py#L214这似乎是一个安全的假设.在您的补丁中,由于某种原因,您已修补了read方法.在创建缩略图时,从缓存中提取ImageFile实例(如果没有创建它),那么你当然可以调用读取文件的读取,但是预期的用途是.url,它使用缓存的名称来调用存储上的url是一个非存储访问操作.您是否可以尝试将您的问题与您的代码中的存储访问权限发生在一起?
还要确保已打开THUMBNAIL_DEBUG,并且您已正确设置键值存储.
| 归档时间: | 
 | 
| 查看次数: | 7730 次 | 
| 最近记录: |