2011-05-09 3 views
0

인터넷의 이미지 링크를 사용하여 이미지 업 로더를 만들고 싶습니다 (eq : wwww.google.com/image.jpg). 사용자가 이전 url을 쓴 다음 내 모델에서 업로드합니다.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

사용자 입력에서 무엇을 가져 왔습니까? 이미지 파일 또는 이미지 URL입니까?

이미지 URL 인 경우 form.URLField 필드를 만들어 게시물을 저장하고 지금하고있는 것처럼 저장하십시오.

이미지 파일 인 경우 POST 요청에서 이미지 파일을 추출하지 마십시오. 파일을 꺼낸 후에는 (read()을 통해) form.is_valid 필드가 없기 때문에 실패합니다. form.save()을 수행하고 올바른 이름으로 올바른 폴더에 업로드하는 것이 중요합니다.

+0

은 내가 할당하는 방법을 다운로드 내 양식 (form.image = save)에 이미지? –

+0

아마도/tmp에 "읽지 않은 얼룩 (blob)"을 주어야합니다. 그러나 URL이 필요한 경우 FileField를 사용해야하는 이유는 무엇입니까? –

+0

문제가 해결되었습니다. 다른 var의 내용을 페이지의 URL로 정의한 다음 데이터베이스에 URL을 저장합니다. –

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() 
관련 문제