1

我正在尝试上传图像,然后创建它的缩略图,然后将两者都存储在 S3 中。文件上传后,我首先将其上传到 S3,然后尝试创建缩略图,但它不起作用,因为 PIL 无法识别图像。其次,如果我先创建缩略图而不是上传原始图像,我会得到 EOF。

我认为Django只允许一次上传的文件只使用一次......请告诉我一种方法......提前谢谢

4

3 回答 3

2

嗯,您的问题需要更具体,但我们正在做同样的事情,工作流程如下:

1)您从 request.FILES 获取文件上传的文件句柄并将其存储在本地文件系统中的某个位置,因此您不能在流上工作 - 我猜这就是导致您的问题的原因

2)您使用 PIL(或者更好的是 Pillow)来操作 FS 上的图像,调整大小,缩略图,等等。

3) 您使用 Boto (http://boto.cloudhackers.com/en/latest/) 上传到 S3,因为 Boto 将 AWS 的处理权交给您。

它非常简单并且效果很好

于 2012-12-14T11:20:20.273 回答
0

I finally figured it out. The problem was that it was a stream that the uploaded file is stored into, so everytime i read the file it would reach the EOF.

The only and best way out is to seek(0) everytime we read the file.

This is also needed when playing with other files also in django.

于 2012-12-15T05:01:41.120 回答
0

您的 PIL 安装是否在编译时找到了正确的库。您可以尝试卸载它并使用 pip 重新安装它。

查看编译输出的末尾,有一个部分详细说明了哪些库可用。

我花了很长时间试图找出为什么它没有发现我的 jpeg、png/zip 库,然后才意识到它在错误的地方寻找。

在 Debian 中,我需要下载 PIL/Pillow 源代码并添加:

_add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu")

到 settings.py 文件的“标准位置”部分 - 这是我的 libjpeg.so 安装到的目录

然后我需要运行

python setup.py install

并检查输出以确保它找到了正确的库

希望这可以帮助

于 2012-12-14T13:29:51.913 回答