使用django从其他网站上传图片

时间:2011-05-09 09:38:31

标签: python html django

我想使用互联网上的图片链接制作图片上传器(例如:wwww.google.com/image.jpg)。用户编写上一个URL,然后我的模型上传它。

这是我的代码:

形式

<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)?

2 个答案:

答案 0 :(得分:0)

您从用户输入中获得了什么?是图像文件还是图像URL?

如果是图片网址,请将该字段设为form.URLField并执行帖子并像现在一样保存。

如果是图像文件,则不要从POST请求中提取图像文件。取出文件后,(通过read()form.is_valid失败,因为该字段不存在。只需执行form.save()并使用正确的名称上传到正确的文件夹,就可以了解。

答案 1 :(得分: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()