До недавнего времени это не было проблемой, и это затрагивало только 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 })