Django是否关闭并删除临时上载的文件和InMemoryUploadedFile?
我已经通读了所有关于临时上传文件和InMemoryUploadedFile的文档,但他们从来没有谈到清理。我知道Python临时文件需要关闭才能自动删除Django是否关闭并删除临时上载的文件和InMemoryUploadedFile?,django,file,django-models,multipartform-data,temporary-files,Django,File,Django Models,Multipartform Data,Temporary Files,我已经通读了所有关于临时上传文件和InMemoryUploadedFile的文档,但他们从来没有谈到清理。我知道Python临时文件需要关闭才能自动删除 @api_view(['POST', ]) def test(request): #img is type InMemoryUploadedFile for img in request.FILES.getlist('images'): Model.objects.image = img Mode
@api_view(['POST', ])
def test(request):
#img is type InMemoryUploadedFile
for img in request.FILES.getlist('images'):
Model.objects.image = img
Model.save()
#vid is type TemporaryUploadedFile
for vid in request.FILES.getlist('videos'):
Model.objects.video = vid
Model.save()
在上面的代码中,临时上载的文件和InMemoryUploadedFile是否自动删除和清理?这些文件关闭后,WSGI处理程序可以提供一个名为
close
的方法,该方法称为请求后处理
Django源代码(http/request.py)
编辑:
Django在内存和临时文件中全局配置两种类型的文件上传器。所有这些类都实现了
close
方法,request
对象的close方法注册为\u resource\u closer
,这些方法是从HttpResponseBase
的close
方法调用的。对于InMemoryPloadedFile也是这样吗?它是否在使用后立即从内存中清除?内存中的文件也会关闭。这种情况在不调用.close()的情况下发生?WSGI处理程序将调用request.close
并在打开的文件上关闭。
class HttpRequest:
...
def close(self):
if hasattr(self, '_files'):
for f in chain.from_iterable(list_[1] for list_ in self._files.lists()):
f.close()