Django + 龙卷风 |图片上传

Posted

技术标签:

【中文标题】Django + 龙卷风 |图片上传【英文标题】:Django + tornado | Image Upload 【发布时间】:2014-04-08 07:34:30 【问题描述】:

我正在尝试创建类似于网页的 facebook 群组,人们可以在群组页面上发布任何文本或图像,并且所有订阅该页面的用户都将获得人们发布的文本和图像的实时提要。

为了实现这一点,我使用了 django + tornado 集成,其中网页由 django 呈现,所有异步请求都由 tornado 使用 websockets 处理。

所以, 在组页面上,我能够使用 websockets 实现从客户端到服务器的文本传输,并且所有用户都可以实时更新页面上发布的新文本。 现在,我也想允许人们分享图片。

我不确定我应该使用 django(使用 POST 上传)还是 tornado(使用 websockets)来上传图片。在这种情况下,首选的方式是什么?

【问题讨论】:

你得到答案了吗,我需要用龙卷风上传图片。这样做是个好主意吗..? 我没有得到答案,但我现在正在使用 Django 进行上传。 能否请您发布该示例或邮件...? 【参考方案1】:

建议: 用户将图像上传到 django,django 随时存储并返回 url。 然后,用户通过 websocket 发送这个 url,类似于 text post。

【讨论】:

【参考方案2】:

您应该使用 Django 进行图像上传,这样做非常有效。这是一个简单的图像上传模型。

from django.db import models

LEFT = "left"
RIGHT = "right"
FLOAT_CHOICES = ((LEFT, _("left")),
            (RIGHT, _("right")),
)

class Sample(CMSPlugin):

    float = models.CharField(_("Image placement"), max_length=10, blank=True, null=True,
        choices=FLOAT_CHOICES, help_text=_("Move image left, right or center."))
    image = models.ImageField(_("image"), upload_to=CMSPlugin.get_media_path)
    big_header  = models.TextField(_("Quotation"),null=True, max_length=150)
    name = models.CharField(_("Name of Recommending person"), max_length=150)
    detail = models.CharField(_("School detail"), max_length=200)

在你的requirements.txt文件中包含两个包:

 boto==2.7.0
 django-storages==1.1.6

这些库为将图像上传到 S3 提供了非常好的支持(这是每个人都喜欢的媒体文件)。一旦您的图片上传成功,它会返回一个图片路径,该路径又会保存到您的数据库中。

要使用 S3,请在 settings.py 或 base.py 中添加这些设置。

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_STORAGE_BUCKET_NAME = '<s3-bucket-name>'
AWS_S3_SECURE_URLS = False
AWS_PRELOAD_METADATA = True
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']

【讨论】:

以上是关于Django + 龙卷风 |图片上传的主要内容,如果未能解决你的问题,请参考以下文章

django图片上传

Django_上传图片和模版获取图片

Django上传并显示图片

Django配置图片上传

django里上传图片的操作

django之创建第10-1个项目-图片上传并记录上传时间