Django отвечает содержимым файла, но не запрашивает загрузку

Я работаю над приложением Django, где пользователь нажимает кнопку, вызывает скрипт python для выполнения работы, а затем загружает файл .zip, созданный указанной работой. Я проверил, что файл создан успешно, и в javascript я использовал предупреждение для печати ответа с сервера. Содержимое файла возвращается, но загрузка файла не появляется в браузере/где-либо на моем компьютере. Вот код, который я использую для загрузки:

if os.path.exists(zip_file_location_server):
    with open(zip_file_location_server, 'rb') as zip_file:
            response = HttpResponse(FileWrapper(zip_file), content_type='application/zip')
            response['Content-Disposition'] = 'attachment; filename="foo.zip"'
            return response

Я пытался:

  • Удаление FileWrapper (оставив только файловый объект в качестве первого аргумента HttpResponse)
  • Изменение аргумента filename на zip_file_location_server
  • Изменение аргумента content_type на application/force-download

Все безрезультатно. Что мне не хватает для загрузки возвращенного ZIP-файла?


person kneedhelp    schedule 26.06.2019    source источник
comment
Вы делаете запрос AJAX?   -  person Daniel Hepper    schedule 26.06.2019
comment
Да, я вызываю скрипт Python через вызов jQuery $.get(). Я использую alert() для печати ответа в параметре функции success функции $.get().   -  person kneedhelp    schedule 26.06.2019
comment
Ваш код Django правильный, проблема в том, что $.get() игнорирует заголовок Content-Disposition.   -  person Daniel Hepper    schedule 26.06.2019
comment
Я попытался переключить $.get() на $.post(), но у меня возникла та же проблема. Есть ли у вас какие-либо советы о том, что я мог бы использовать для решения этой проблемы?   -  person kneedhelp    schedule 26.06.2019
comment
Извините, мой комментарий был неясен. Взгляните на этот вопрос и ответ с наибольшим количеством голосов: Обработать загрузку файла из ajax опубликовать   -  person Daniel Hepper    schedule 26.06.2019
comment
Это сработало прекрасно. Благодарю вас!   -  person kneedhelp    schedule 27.06.2019