TemporaryUploadedFile
使用tempfile.NamedTemporaryFile
. Python 文档有这样的说法:
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
此函数的操作与 TemporaryFile() 完全一样,除了文件保证在文件系统中具有可见名称(在 Unix 上,目录条目未取消链接)。该名称可以从文件对象的名称属性中检索。在命名的临时文件仍处于打开状态时,是否可以使用该名称再次打开文件,因平台而异(在 Unix 上可以这样使用;在 Windows NT 或更高版本上不能)。如果 delete 为真(默认),则文件一关闭就会被删除(强调我的)。
返回的对象始终是类文件对象,其文件属性是底层的真实文件对象。这个类文件对象可以在 with 语句中使用,就像普通文件一样。
因此,这里的默认行为是在文件关闭后立即删除文件,这将在初始处理后自动删除。所以你有两个选择。您可以子类TemporaryUploadedFile
化并覆盖该__init__
方法,以便您可以传递delete=False
给tempfile.NamedTemporaryFile
(但是您需要记住在完成后手动删除文件以避免旧临时文件的堆积),或者您可以确保移动您的TemporaryUploadedFile
在处理上传返回之前的其他地方,然后将新位置发回。
它不适合使用UploadedFile
,因为它是一个基类,并且本身不打算被实例化。