通过urlopen打开远程文件并将其添加到FileField

时间:2012-06-16 15:00:45

标签: python django

我有一个类似的问题: how to manually assign imagefield in Django

除了我的文件来自远程主机并且我只给了一个网址,所以类似:

class Book(models.Model):
    name = models.CharField()
    url = models.URLField()
    file = models.FileField(null=True, blank=True, editable=False)

class BookForm(forms.ModelForm):
    class Meta:
        model = Book

def view(request):
    if request.POST:
        form = BookForm()
        if form.is_valid():
            request = form.instance.source_url
            try:
                f = urlopen(request)
                # ...create open file obj...
                form.instance.local_file.save(form.instance.ref, f.read(), True)

            except Exception:
                print 3

在这种情况下,如何将f转换为打开的文件对象,以便保存其内容?

1 个答案:

答案 0 :(得分:3)

使用requests这是微不足道的。

import requests
from StringIO import StringIO

r = requests.get(file_url)
f = StringIO(r.content)

# f.read()

最后,正如所写的那样 - 当您重新分配request时,您的代码会导致出现问题。您应该将此行request = form.instance.source_url更改为file_url = from.instance.source_url之类的其他内容。< / p>