模型中的Django FileField,S3 Storage + Boto,400 Bad Request

时间:2014-02-14 22:25:03

标签: django file-upload amazon-s3 boto

我正在Django开发一个Web应用程序,它的一个功能是添加带有照片的新文章。

我的Article模型类包含models.FileField。我使用S3BotoStorage作为DEFAULT_FILE_STORAGE(Amazon S3)。

用户可以通过两种方式将照片添加到文章中:
1)从磁盘上传照片(使用input type=file
2)将URL粘贴到现有照片

如果用户使用选项1),一切正常。我从request.FILES字典中查看上传文件并将其分配到FileField对象中的Article。照片上传到S3。

但是当用户将URL粘贴到照片上时,我要做的第一件事就是下载这张照片。我是通过使用函数来实现的:

def downloadPhotoFromURL(url):
try:
    img = urllib.urlretrieve(url)[0]
    return img
except Exception:
    return None

然后我将此图像保存到模型中的FileField,因此我的整个代码负责下载图像并将其上传到S3,如下所示:

articleImg = downloadPhotoFromURL(url)
f = File(open(articleImg), 'rb')
newArticle.image.save('tmp', f)

在这种情况下,我无法将其上传到S3,2分钟后我收到BotoServerError: 400 Bad Request。不幸的是,我没有任何其他信息,为什么这个请求是坏的。知道什么可能出错吗?当我将图像保存到模型时,我保存了一个模型,因此当我尝试将照片上传到S3时模型存在。

0 个答案:

没有答案