Загрузка файла не будет завершена (удаляет готовый файл, перезапускает - влияет на более новый Chrome (-подобный) браузер) - PullRequest
0 голосов
/ 24 февраля 2020

До недавнего времени это не было проблемой, и это затрагивало только Chrome браузеры. Например, это влияет на Brave, но загрузка все равно работает на Firefox. И эта проблема началась недавно.

Мой сервер создает файл отчета (csv), который затем, когда он будет готов, будет доставлен пользователю по ссылке. Файл отчета создается с помощью асинхронной задачи с помощью django -celery. Если файл не готов, страница просто перезагружается и предлагает ту же ссылку для скачивания. Создание файла не занимает много времени на практике ...

Это не особенно сложно, но это работает для моих целей.

Просмотр:

def account_get_all(request):
    link = None
    if request.method == 'GET':
        if request.GET.get('create-report'):
            # creates report
        elif request.GET.get('link'):
            link = request.GET.get('link')
            try:
                result = AsyncResult(link)
                if result.ready():
                    filename = "path/to/app/media/dumps/" + result.get()
                    wrapper = FileWrapper(open(filename))
                    response = FileResponse(wrapper, content_type='text/plain')
                    response['Content-Length'] = os.path.getsize(filename)
                    response['Content-Disposition'] = 'attachment; filename="'+result.get()+'"'
                    return response
                else:
                    parsed_uri = urlparse(request.META.get('HTTP_REFERER'))
                    domain = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
                    return redirect(domain + path + result)
            except:
                # do some error handling
        return render(request, 'get_report.html', {'accounts' : accounts, 'file_link': link })
    else:
        return render(request, 'get_report.html', {'accounts' : accounts })

1 Ответ

0 голосов
/ 27 февраля 2020

Итак, я проанализировал проблему, удалил строку response['Content-Length'] = os.path.getsize(filename), и она заработала ...

Я прогуглил это и, да, есть некоторые комментарии о некоторых браузерах (Chrome и подобных, obvs!) отклонение файла, когда он не соответствует размеру, который он рекламирует. В комментариях говорится, что размер файла изменился между запросом размера и завершением загрузки. Но это совсем не моя проблема здесь. Я не знаю, почему размер файла отличается от того, когда я получаю Content-Length.

Я могу открыть другой вопрос для этой проблемы.

...