Уничтожение файла после ответа HTTP в Django - PullRequest
0 голосов
/ 27 октября 2019

Я сейчас создаю веб-сайт, который загружает определенные изображения с других веб-сайтов, ZIP-файлы и позволяет пользователям загружать ZIP-файл.

Все отлично работает, но у меня нет возможности удалить ZIP-файл с сервера,который должен быть удален после того, как пользователи загрузят его.

Я попытался удалить временный каталог, содержащий zip-файл, с shutil.rmtree, но я не смог найти способ запустить его после HTTPResponse.

Здесьмой код в views.py.

    zipdir = condown(idx)#condown creates zip file in zipdir
    logging.info(os.path.basename(zipdir))
    if os.path.exists(zipdir):
        with open(zipdir, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="multipart/form-data")
            response['Content-Disposition'] = 'inline; filename=download.zip'
            return response
    raise Http404

Заранее спасибо.

1 Ответ

0 голосов
/ 27 октября 2019

Вы должны смотреть на Проект сельдерея . Это позволяет планировать отложенные вызовы функций (после генерирования ответа).
Таким образом, вы можете прочитать этот файл в переменной и запланировать задачу для удаления этого файла.

# views.py
def some_view(request):
    zipdir = condown(idx)#condown creates zip file in zipdir
    logging.info(os.path.basename(zipdir))
    response = HttpResponseNotFound()
    if os.path.exists(zipdir):
        with open(zipdir, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="multipart/form-data")
            response['Content-Disposition'] = 'inline; filename=download.zip'

    task_delete_zipfile.delay(zipdir)
    return response


# tasks.py
import os
from webapp.celery import app

@app.task
def task_delete_zipfile(filePath):
    if os.path.exists(filePath):
        os.remove(filePath)
    else:
        print("Can not delete the file as it doesn't exists")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...