gpt4 book ai didi

python - 使用 StreamingHttpResponse 流式传输和下载大型 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:55 26 4
gpt4 key购买 nike

所以我面临的问题是尝试让我们的网络服务器导出到 CSV 按钮正常工作,一个要求是文件不能保存在本地,必须直接流式传输到客户端。目前,我只是尝试从服务器获取一个基本的 CSV 文件流式传输并保存在本地计算机上,然后再担心渲染实际数据。

因此,我在按钮上单击一个帖子到我希望渲染的 View ,然后返回响应。这是一个 $.ajax 函数,但我在测试过程中更改了它,现在看起来像这样:

$("#exportbutton").click(function(e){
$.post("{% url 'doner:download' %}", function(data)
{
console.log(data);
});
})

View 中的代码如下所示(恰好是 SO 示例的 CTRL+V):

def download(request):
def stream():
buffer_ = io.StringIO()
writer = csv.writer(buffer_)
for row in rows:
writer.writerow(row)
buffer_.seek(0)
data = buffer_.read()
buffer_.seek(0)
buffer_.truncate()
yield data

response = StreamingHttpResponse(
stream(), content_type='text/csv'
)
disposition = "attachment; filename=file.csv"
response['Content-Disposition'] = disposition

return response

因此,经过大量修改后,这是我所得到的,它将“流”(?)数据返回到 HTML 页面,console.log 将输出"file"数据,但我没有得到任何形式的文件或下载,只是数据控制台中的日志。

我不知道我是否误解了 StreamingHttpResponse 的工作原理,我打算在客户端做更多的事情,以便通过流下载它,但我已经阅读了文档,但我不太清楚。

任何帮助将不胜感激,因为我很困惑,干杯!

最佳答案

我面临的问题是使用 jQuery 发布,显然浏览器无法使用 AJAX 下载文件,因此为了修复此部分并获取文件下载,我所做的只是在 AJAX 内部(确保它在下载之前就生成好了)添加行 location.replace('doner/download'); 就是这样...

现在 jQuery 看起来像这样:

$("#exportbutton").click(function(e){
$.post("{% url 'doner:download' %}", function(data)
{
console.log(data);
location.replace("{% url 'doner:download' %}");
});
})

一切都按需要进行!

关于python - 使用 StreamingHttpResponse 流式传输和下载大型 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44672304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com