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配置。