将图像/视频上传到我的 Amazon S3 媒体目录需要很长时间



所以我正在使用 Amazon S3 存储来存储用户上传的文件。当用户在我的 Django 网站上发布帖子时,它会附带一些文本和图像/视频 - 该图像/视频会上传到我的 S3 存储桶上的 media 目录。

但是,这需要很长时间,例如,在帖子中包含6mb的图像将需要帖子超过一分钟才能提交。如果图像很小,例如 150kb,则只需大约 3 秒即可提交帖子。如何提高此性能?

Post只是一个具有以下字段的表单(image是图像或视频(:

class Post(models.Model):
    user = models.ForeignKey(User, blank=True, null=True)
    title = models.TextField(max_length=95)
    date = models.DateTimeField(auto_now_add=True)
    content = models.TextField(null=True, blank=True)
    image = models.FileField(null=True, blank=True)

和观点:

def post(request):
    if request.user.is_authenticated():
        form_post = PostForm(request.POST or None, request.FILES or None)
        if form_post.is_valid():
            instance = form_post.save(commit=False)
            instance.user = request.user
            instance.save()
            return HttpResponseRedirect('/home/')
        else:
            form_post = PostForm()
        context = {
            'form_post': form_post,
        }
        return render(request, 'post/post.html', context)
    else:
        return HttpResponseRedirect("/accounts/signup/")

知道吗?

您应该尝试处理昂贵的长时间运行的操作,例如在 API 终端节点处理程序之外将文件上传到 S3。
它将使您的 Web 应用程序更加健壮和可扩展,并且您不必处理可能超时的日志运行 HTTP 请求,并且您可以让用户了解正在发生的事情。

例如,您可以使用芹菜来处理排队。

你可以使用 django-queued-storage 来管理本地/远程存储上传和检索的实际案例。

用于说明其文档中的代码示例。

from django.db import models
from queued_storage.backends import QueuedStorage
from storages.backends.s3boto import S3BotoStorage
queued_s3storage = QueuedStorage(
    'django.core.files.storage.FileSystemStorage',
    'storages.backends.s3boto.S3BotoStorage')
class MyModel(models.Model):
    image = ImageField(storage=queued_s3storage)

最新更新