Django TemporaryUploadedFile 在 Python2/3 下的不同行为与 delete=False
Django TemporaryUploadedFile different behaviour under Python2/3 with delete=False
为什么 TemporaryUploadedFile
在 Python 3 中被删除,而在 Python 2 中它留在 /tmp/
目录中?我如何在使用 3 时保持 Python 2 的行为?
from django.core.files.uploadedfile import TemporaryUploadedFile
with TemporaryUploadedFile('something.txt', 'text/plain', 0, 'UTF-8') as tmp_file:
tmp_file_path = tmp_file.temporary_file_path()
tmp_file.file.delete = False
print(tmp_file_path)
运行 Python 2 下的此代码块将文件保存在 /tmp/
目录中,而在 Python 3 上它会被删除。
[ray@fedora tmp]$ ls | grep tmp
tmpvSmI8b.upload #generated in Python 2
PY2 version 2.7.18
PY3 version 3.7.12
Django 1.11.29
不知道此行为为何不同的详细信息,但如果您想将文件保留在 /tmp/
中,则需要使用 delete=False
属性实例化 NamedTemporaryFile
。像这样:
NamedTemporaryFile(delete=False, ...)
为什么 TemporaryUploadedFile
在 Python 3 中被删除,而在 Python 2 中它留在 /tmp/
目录中?我如何在使用 3 时保持 Python 2 的行为?
from django.core.files.uploadedfile import TemporaryUploadedFile
with TemporaryUploadedFile('something.txt', 'text/plain', 0, 'UTF-8') as tmp_file:
tmp_file_path = tmp_file.temporary_file_path()
tmp_file.file.delete = False
print(tmp_file_path)
运行 Python 2 下的此代码块将文件保存在 /tmp/
目录中,而在 Python 3 上它会被删除。
[ray@fedora tmp]$ ls | grep tmp
tmpvSmI8b.upload #generated in Python 2
PY2 version 2.7.18
PY3 version 3.7.12
Django 1.11.29
不知道此行为为何不同的详细信息,但如果您想将文件保留在 /tmp/
中,则需要使用 delete=False
属性实例化 NamedTemporaryFile
。像这样:
NamedTemporaryFile(delete=False, ...)