2011-03-10 29 views
3

我有錯誤後嘗試上傳和調整圖像到s3與pil和botos3和django default_storage錯誤。我正試圖在管理員保存中執行此操作。Django管理員上傳和圖像到S3,然後調整圖像大小和保存拇指問題

這裏是代碼:

from django.db import models 
from django.forms import CheckboxSelectMultiple 

import tempfile 

from django.conf import settings 

from django.core.files.base import ContentFile 
from django.core.files.storage import default_storage as s3_storage 
from django.core.cache import cache 

from datetime import datetime 

import Image, os 
import PIL.Image as PIL 
import re, os, sys, urlparse 

class screenshot(models.Model): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=200) 

    image = models.ImageField(upload_to='screenshots') 
    thumbnail = models.ImageField(upload_to='screenshots-thumbs', blank=True, null=True, editable=False) 

    def save(self): 
     super(screenshot, self).save() # Call the "real" save() method 
     if self.image: 

      thumb = Image.open(self.image.path) 
      thumb.thumbnail(100, 100) 

      filename = str(self.slug) 

      temp_image = open(os.path.join('tmp',filename), 'w') 
      thumb.save(temp_image, 'JPEG') 

      from django.core.files import File 
      thumb_data = open(os.path.join('/tmp',filename), 'r') 
      thumb_file = File(thumb_data) 

      new_file.thumb.save(str(self.slug) + '.jpg', thumb_file) 


    def __str__(self): 
     return self.title 

這僅僅是在很多方面我都試圖得到它的工作之一,我要麼得到(2,「沒有這樣的文件或目錄」)或其他一些錯誤。

請有人可以幫助我得到它的工作。我希望它使用django後端來上傳圖片的大小並保存爲縮略圖,然後保存。讓我知道你是否需要知道任何信息。我很樂意使用django片段 - http://djangosnippets.org/snippets/224/,但我不知道用什麼數據來提供它。即使主圖像上傳到s3,我也會得到相同的IOErrors和'沒有這樣的路徑/文件名'。我也嘗試過這樣的事情:

myimage = open(settings.MEDIA_URL + str(self.image)) 
myimage_io = StringIO.StringIO() 
imageresize = myimage.resize((100,100), Image.ANTIALIAS) 
imageresize.save('resize_100_100_aa.jpg', 'JPEG', quality=75) 

已經有3天的時間了,所以我現在開始備用!謝謝

回答

5

你爲什麼不試試sorl-thumbnail。它具有與默認的ImageField django提供的完全相同的界面,看起來它比使用自己的支持更適合使用。

  • 存儲支持
  • 可插拔引擎支持(PIL,pgmagick)
  • 可插拔鍵值存儲支持(Redis的,緩存DB)
  • 可插拔的後臺支持,
  • 聯繫與可能的整合刪除
  • 虛擬世代
  • 靈活簡單的語法,不生成html
  • 的ImageField的模型,刪除縮略圖
  • CSS樣式裁剪選項
  • 保證金計算的垂直定位
+0

一旦我回家,我會試試這個。我試圖讓自己的,但我想用別人的更好的做法是一個更明智的做法! – Designer023 2011-03-14 09:49:01

+0

我試過sorl-thumbnail,它太棒了!似乎無法讓它在後端工作,但對於它所在的模板。感謝您的幫助:-) – Designer023 2011-03-18 09:56:07

7

我也有類似的問題,但在使用SORL-縮略圖我的情況是不是一種選擇。我發現我可以通過傳入文件描述符而不是路徑直接從S3BotoStorage打開一個圖像。

所以不是

thumb = Image.open(self.image.path) 

使用

thumb = Image.open(s3_storage.open(self.image.name)) 

然後你就可以處理並在本地保存新文件爲你做之前。

+0

感謝您的回答。想知道是否有辦法使用django存儲做類似的事情來抽象出它是否使用本地存儲或s3存儲。 – 2012-09-13 17:47:39

相關問題