首先 - 抱歉我的英文.. 我继承了一个使用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和一个文件是不同的..任何人都可以帮助我将我的文件转换为所需的类型?或者告诉我这个想法怎么做......项目真的很大,如果我尝试改变提交机制,可能会导致很多问题。 再次对不起我的英语)
答案 0 :(得分:1)
我真的不明白为什么它不起作用,但我发现这对我有用..
url = request.POST['file_link']
name = urllib2.urlopen(url).read()
file = name
..
urllib2.urlopen(“链接到文件”)返回一个普通文件,就是它..