Django + ExtJS FileUpload(直接来自PC和链接)

时间:2011-07-15 09:32:03

标签: django file-upload extjs

首先 - 抱歉我的英文.. 我继承了一个使用ExtJS并且基于Django的相当大的项目。所以我有一个上传表单,它工作正常。文件的路径是在fileuploadfield(这是ExtJS字段的xtype)中给出的,然后由Django获取并保存到DB(它被转换为需要的视图以存储在基础中,但这不是问题..) 所以我有这样的想法:

class image(entity):
    ...

    def create(self,request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        try:
            parent_id = int(request.POST["parent_id"])
        except:
            return ErrorResponse()
        if form.is_valid():
            fl =  request.FILES['file'];
            file = fl.read()
            Obj = self.data.obj
            New = Obj()

            setattr(New,'is_main',False)

等等.. 所以我需要从直接链接上传文件。当然是另一个领域。从链接获取文件不是问题(urllib2帮助很好),将文件保存到媒体文件夹也不是问题。但我无法在上面的代码中插入它。据我所知 - 我的问题是文件对象不同于request.FILES事情..但我不知道如何将普通文件(在我的情况下所有文件都是图像)转换为request.FILES so它对于下一个函数是可读的..我的意思是: 我从另一个字段(textfield)中捕获到该文件的链接:

            url = request.POST['link'] #It get's the user posted link
            name = urllib2.urlopen(url).read()
            f = open('media/images/picture.gif', 'wb') #I overwrite it on a dummy, couse it must be than transfered to the db
            f.write(name)
            f.close #the file can be seen in the media path

确定。该文件现在位于/ media /文件夹中,但如果我只是尝试替换 file = f.read()的file = fl.read()不起作用。据我所知 - request.FILES和一个文件是不同的..任何人都可以帮助我将我的文件转换为所需的类型?或者告诉我这个想法怎么做......项目真的很大,如果我尝试改变提交机制,可能会导致很多问题。 再次对不起我的英语)

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么它不起作用,但我发现这对我有用..

            url = request.POST['file_link']
            name = urllib2.urlopen(url).read()
            file = name
            ..

urllib2.urlopen(“链接到文件”)返回一个普通文件,就是它..