在某些情况下,用户可以将临时文件发送到我的服务器。我想跟踪那些临时文件(因为它们以后会被使用,我想知道,当我可以删除它们时 - 或者当它们没有被使用并且可以被收集时)。我应该使用什么样的模型?我将使用AJAX
(和iframe
)发送这些文件。
修改
如果我在模型FileField
中使用,我该如何处理文件上传?您能否展示一些示例代码段,我的函数应该如何将文件从request.FILES
放到FielField
。
答案 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/')