2012-12-14 45 views
1

我尝试上传图片并创建它的缩略图,并且都将其存储在S3中。文件上传完成后,我首先将其上传到S3,然后尝试创建缩略图,但它不起作用,因为PIL无法识别图像。其次,如果我首先创建缩略图,而不是在上传原始图像时获得EOF。Django中的图片上传和操作

我认为Django的仅允许一次上传的文件只能使用一次....请请告诉我一个办法做下去....提前

+0

什么不工作?你如何上传到S3?如果您有权访问文件对象,我不会看到什么阻止您对其执行多个操作。只需在文件上搜索(0),以便将来的操作可以正确读取()该文件。还有django-storage,但我认为它在这些场景中挣扎着,因为它被迫多次上传/下载。客户端 - > Django - > S3 - > Django - > S3。 –

+0

“它不起作用,因为PIL无法识别图像”您怎么知道? –

回答

2

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

1)你从文件上传request.FILES文件句柄,并将其存储在本地文件系统的某个地方,所以你不要在流“T工作 - 这是我猜是造成你的问题

2)使用PIL(或更好,但枕头)操纵上的图像FS,调整大小,缩略图,等等。

3)使用宝途(http://boto.cloudhackers.com/en/latest/)上传到S3,因为博托采用AWS的处理伸出你的双手。

这是很简单和行之有效的

+0

是的。我认为问题在于我正在处理流...但是会在本地存储文件,而不是在工作和上传后不会减慢整个过程? –

+0

并没有任何方法能够使用流本身 –

+0

嗯,一个流是一个流,所以你要么复制它,要么只是两次调用pil.thumbnail而不使用两次打开,这可能工作,但我不确定。至于放慢这个过程,是的,它会有一点点,如果它是一个问题(如果这是在管理页面,然后拧开dealy,如果它在前端,并且你有数百人上传图片,然后使用django-celery或类似的东西) –

0

难道你的PIL安装找到正确的库编译时。您可以尝试卸载并用pip重新安装。

看朝向编译输出的端部并有一个节详述库可用。

我花了很长时间试图找出为什么没有意识到这是找错了地方之前发现我的JPEG,PNG/ZIP库。

在Debian中,我需要下载PIL /枕头来源并添加:

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

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

然后我需要运行

python setup.py install 

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

希望这有助于

0

我终于想通了。问题在于它是一个上传文件存储到的流,所以每次我读取它将到达EOF的文件。

唯一的,最好的出路是寻求(0)每次我们读取该文件。

当在django中使用其他文件时,这也是需要的。