Django: загрузка не начинается после возвращения файла из вида - PullRequest
1 голос
/ 27 апреля 2019

Собрав информацию из различных потоков переполнения стека, я предложил следующую функцию представления в Django для возврата текстового файла через объект HttpResponse:

def serve_file(request):
    filepath = sampler_settings.ZIP_PATH + '/test_file'
    f = open(filepath, 'r')
    response = HttpResponse(f, content_type='application/force-download')
    response['Content-Disposition'] = 'attachment; filename="test_file"'
    return response

Функция вызывается из интерфейса следующим образом:

function serve_file() {
        let url = 'http://127.0.0.1:8000/serve_file'
        fetch(url)
            .then(response => response.text())
            .then(text => console.log(text))
}

Однако единственное, что происходит, - это то, что содержимое файла печатается в консоли браузера, но загрузка не начинается: нет приглашения или чего-либо еще.

Это на сервере разработки в Ubuntu и Firefox.

В чем может быть причина?

1 Ответ

2 голосов
/ 27 апреля 2019

Причина в том, что http-запрос через ajax отличается от обычного запроса от браузера.Ajax дает вам ответ в JavaScript.Таким образом, вы должны запросить файл из браузера (используя window.location) изначально или сделать загрузку через JavaScript, как это.

function serve_file() {
        let url = 'http://127.0.0.1:8000/serve_file'
        fetch(url)
            .then(response => response.text())
            .then(text => {

          const blob = new Blob(text, {type: 'application/forced-download'});
          const url = URL.createObjectURL(blob);
          const link = document.createElement("a");
          link.href = url;
          link.download = "file_name";
          document.body.appendChild(link);
          link.click();
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...