Python Django手动文件上载到s3超时-502

Python Django手动文件上载到s3超时-502,python,django,image,file-io,amazon-s3,Python,Django,Image,File Io,Amazon S3,我在我们网站的管理面板中有一个脚本,允许我们上传图像,裁剪图像并保存它们。保存时,将剪切并上载原始图像。我们使用cublybudly.storage.s3.S3Storage作为存储后端 以下是上载图像的块: name, contents = self.crop_image(x, y, w, h, (220, 142), 'default_filter') if name is not None and contents is not None: self.def

我在我们网站的管理面板中有一个脚本,允许我们上传图像,裁剪图像并保存它们。保存时,将剪切并上载原始图像。我们使用
cublybudly.storage.s3.S3Storage
作为存储后端

以下是上载图像的块:

    name, contents = self.crop_image(x, y, w, h, (220, 142), 'default_filter')
    if name is not None and contents is not None:
        self.default_filter_image.save(
                    name,
                    ContentFile(contents.getvalue()), save=False
            )
裁剪图像几乎不需要时间,502在尝试调用
self.default\u filter\u image.save()位时发生。我们上传的图像少于100k(极小)

这里有
crop_image
功能,以防其中的某些内容导致问题

def crop_image(self, x, y, w, h, finished_size, img_prop):
    """
    Returns a cropped version of an image based on some size settings that are passed in. Used to
    create all the sizes and can be used for any size crop.
    """
    original = None

    if self.original_image:
        self.original_image.seek(0)
        original = Image.open(self.original_image)

    if original is not None and x is not None and y is not None \
                    and w is not None and h is not None:

        orig = original.copy()

        cropped = orig.crop(
                # left, upper, right, lower
                (x, y, (x + w), (y + h))
        )

        cropped = cropped.resize(finished_size, Image.ANTIALIAS)

        tmp = Image.new('RGB', cropped.size)
        tmp.paste(cropped, (0, 0))
        cropped = tmp

        contents = StringIO()
        cropped.save(contents, format='jpeg', quality=90)
        contents.seek(0)
        filename = '%s_%s.jpg' % (str(uuid.uuid4()), img_prop)

        return (filename, contents)

    return (None, None)

有人知道我该如何调试它吗?

CuddlyBuddly已经过时,每次它想发布一个文件时都会查询bucket中的整个文件列表,这最终会减慢速度并完全停止工作。使用s3Boto的django storages应用程序更为最新,效果非常好


我也有同样/类似的问题。我的AWS服务器是t1.micro,一切正常。当我将类型更改为m3.medium时,它将停止工作,并给出502。其他读/写功能也不错(我也在使用RDS)。当我将m3.medium恢复为t1.micro时,保存再次起作用。此外,我在VirtualBox上有一个本地VM,并配置为使用S3和RDS。连接很慢,但工作也很好。似乎m3.中级和s3不能很好地相处。我要问问AWS关于这件事。你知道吗?事实上,我最终找到了一个过时的应用程序。我已经有一段时间没有考虑它了,但我相信它是一个过时的API,它试图使用。我认为这是一种拥抱,但不能绝对肯定。如果您发现类似的问题,请告诉我,我会将其作为答案发布。我尝试在服务器上运行
pip install boto--update
,查看它是否过时,但它说它是最新的。对于
django存储也同样如此。AWS支持也帮不了什么忙。最后,我使用Vagrant启动了一个新的VM,实例类型为m3.medium。新实例运行得很好。所以,我放弃了解决前一个实例(构建于10月底,不到2个月前)不起作用的问题。很高兴你让它起作用了。我回到我的提交中,发现我已经放弃了拥抱,转而使用django存储和s3Boto配置。