【问题标题】:When Django deletes uploaded files from the temporary directory?当 Django 从临时目录中删除上传的文件时?
【发布时间】:2014-07-02 16:36:24
【问题描述】:

根据docs

但是,如果上传的文件太大,Django 会写 上传文件到存储在系统临时文件中的临时文件 目录。在类 Unix 平台上,这意味着您可以期望 Django 生成一个名为/tmp/tmpzfp6I6.upload 的文件。如果 上传足够大,你可以看到这个文件随着 Django 变大 将数据流式传输到磁盘上。

所以我多次将同一个大文件上传到一个视图并得到了这个:

vic@vic /tmp $ ls -l tmp*.upload
-rw------- 1 vic vic2 3436110 мая   14 18:31 tmpKdZrQl.upload
-rw------- 1 vic vic2 3436110 мая   14 18:31 tmpqLyBsy.upload

这些文件何时从临时目录中删除?

我想避免临时目录膨胀。

【问题讨论】:

    标签: python django file-upload


    【解决方案1】:

    为了编写这些临时文件,Django 使用了 python 中的tempfile 模块。你可以在django/core/files/temp.py看到django的代码。

    django 临时文件是tempfile.NamedTemporaryFileHere's a link to the code。该构造函数中的默认设置(加上 django 中的代码)要求文件在关闭时被删除。

    所以要注意文件句柄链接;如果它们没有被删除,则可能是您的代码泄漏了文件句柄,并且永远不会关闭它。

    【讨论】:

    • 请求完成后文件没有被删除很奇怪
    • 文件删除与请求状态无关,与文件句柄是否关闭有关。仔细检查,看看是否有代码路径完成请求而不关闭它。
    • 是的,你是对的。我加了request.FILES.get('file').close(),文件被删除了
    • > 文件删除与请求的状态没有任何关系
    • 我不同意 - 有时您会想要对文件进行耗时的处理。假设用户上传了一个文件。响应很快就回来了“好的,谢谢你拿到了文件!” -- 但处理需要从那时开始,并运行一段时间。如果文件在请求完成后立即被删除,则您必须将其复制到其他地方以在在发出响应之前对其进行处理,这将是低效且笨拙的(但有时很方便)跨度>
    猜你喜欢
    • 2014-04-06
    • 2022-12-11
    • 2017-12-22
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多