2011-05-09 39 views
0

我想使用互聯網上的圖像鏈接製作圖片上傳器(例如:wwww.google.com/image.jpg)。用戶寫入前一個網址,然後我的模型將其上傳。使用django從其他網站上傳圖片

這是我的代碼:

形式

<input id="id_name" type="text" name="name" maxlength="255" value="www.example.com/main.jpg" /> 

view.py

def Post_date(): 
    if request.method == 'POST': 
     form = Addamazon() 
     image_url = request.POST.get('image') 
     file = urllib.urlopen(image_url) 
     im = cStringIO.StringIO(file.read()) # constructs a StringIO holding the image 
     img = Image.open(im) 
     save = '/tmp/' + str(int(time.time())) + '.gif' 

     img.save(save) 
     form.image=save 


    if form.is_valid():    
     pic = form.save(commit=False) 
     pic.save() 

models.py

class Pic(models.Model): 
    image = ImageWithThumbsField(upload_to='images', sizes=((128, 128),)) 

圖像上傳但if form.is_valid():不起作用,我不知道如何將它添加到表單數據。 我如何分配下載的圖像到我的表單(form.image = save)?

回答

0

您從用戶輸入中獲取什麼?它是圖片文件還是圖片網址?

如果是圖片網址,那麼將該字段設置爲forms.URLField,然後執行該帖子並保存,就像您現在正在執行的操作一樣。

如果是圖像文件,則不要從POST請求中提取圖像文件。取出文件後,(通過read()form.is_valid失敗,因爲該字段不存在。只要做form.save()和正確的名稱上傳到正確的文件夾,照顧,爲你。

+0

我怎麼可以指定下載圖像到我的窗體(form.image = save)? – 2011-05-09 10:58:04

+0

你應該在/ tmp中給它一個「未讀的blob」。但是,如果您需要URL,爲什麼要使用FileField。 – 2011-05-09 11:42:30

+0

問題解決了,我已經定義了另一個內容頁面url的var,然後將url保存到數據庫 – 2011-06-17 06:19:21

0

不要將二進制圖像分配回form.image。相反,在模型上添加一個單獨的領域來存儲圖像,內容如的FileField或ImageField的,然後檢查是否form.is_valid(),你可以做後:

def Post_date(): 
    if request.method == 'POST': 
     form = Addamazon() 
     image_url = request.POST.get('image') 
     file = urllib.urlopen(image_url) 
     data = cStringIO.StringIO(file.read()) 
     name = str(int(time.time())) + '.gif' 

    if form.is_valid():    
     pic = form.save(commit=False) 
     pic.image.save(name, data) 
     pic.save()