python - 文件下载不会完成(丢弃完成的文件,重新启动 - 影响较新的 Chrome(类似)浏览器)
问题描述
这直到最近才成为问题,它只影响类似 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 })
解决方案
所以我已经剖析了这个问题,删除了这条线response['Content-Length'] = os.path.getsize(filename)
,它起作用了......
我用谷歌搜索了这个,是的,有一些评论是关于某些浏览器(Chrome 等,obvs!)在文件的大小不完全符合广告宣传的情况下拒绝文件。在评论中,它说文件大小在大小请求和下载完成之间发生了变化。但这根本不是我的问题。我不知道为什么文件大小与我获得 Content-Length 时不同。
我可能会针对这个问题提出另一个问题。
推荐阅读
- python - 如何使用 pywsd.utils 对 .txt 文件而不是句子进行词形还原?
- python - 使用 time.strptime() 在 Python 中使用 AM/PM 解析日期时间字符串时出错
- javascript - React-Redux 应用程序:如何在我的页面上的这个字段中只显示部分数据?
- java - 在 ExecutorService 上发布的 Mono/Flux 未按预期终止
- java - 如何在弹出菜单中动态添加单选按钮?
- android - FragmentPagerAdapter - 我知道它已贬值,但我无法正确更改/更新
- alfresco - 使用 Alfresco API 连接 Alfresco
- python - python geopandas:抖动重叠点
- javascript - 为什么对齐项目不沿交叉轴居中?
- angular - 业力并行执行测试用例两次