django:用于保存临时文件的模型

时间:2010-08-16 19:23:56

标签: django file-upload

在某些情况下,用户可以将临时文件发送到我的服务器。我想跟踪那些临时文件(因为它们以后会被使用,我想知道,当我可以删除它们时 - 或者当它们没有被使用并且可以被收集时)。我应该使用什么样的模型?我将使用AJAX(和iframe)发送这些文件。

修改

如果我在模型FileField中使用,我该如何处理文件上传?您能否展示一些示例代码段,我的函数应该如何将文件从request.FILES放到FielField

1 个答案:

答案 0 :(得分:3)

如何存储文件与它们是否通过AJAX无关。您的视图仍然需要处理多部分表单数据,并将其存储在您的数据库和服务器文件系统中,就像Django中的任何其他上传文件一样。

就模型而言,这样的事情怎么样?

class TemporaryFileWrapper(models.Model):
   """
   Holds an arbitrary file and notes when it was last accessed
   """
   uploaded_file = models.FileField(upload_to="/foo/bar/baz/")
   uploading_user = models.ForeignKey(User)
   uploaded = models.DateTimeField(blank=True, null=True, auto_now_add=True)          
   last_accessed = models.DateTimeField(blank=True, null=True, 
                                        auto_now_add=False, auto_now=False)


   def read_file(record_read=True):
      #...some code here to read the uploaded_file
      if record_read:
          self.last_accessed = datetime.datetime.now()
          self.save()

对于基本文件上传处理see the official documentation,但是示例中有handle_uploaded_file()方法,你需要一些代码来创建一个TemporaryFileWrapper对象,这样的东西,这取决于你的需要:

....
form = ProviderSelfEditForm(request.POST, request.FILES) #this is where you bind files and postdata to the form from the HTTP request
if form.is_valid():
     temp_file_wrapper = TemporaryFileWrapper()
     temp_file_wrapper.uploaded_file = 
                       form.cleaned_data['name_of_file_field_in_your_form']
     temp_file_wrapper.uploading_user = request.user #needs an authenticated user
     temp_file_wrapper.save()

     return HttpResponseRedirect('/success/url/')