来自 RESTful API 的 Django 流式传输 HTTP 响应

标签 django rest http

我有一个 Django 应用程序需要与医学图像数据库进行交互。他们有一个返回字节流的 RESTful API,我正在将其写入 HttpStreamingResponse。这是可行的,但问题是它非常慢。我下载的大多数文件都在 100 MB 左右,通常需要 15-20 秒才能开始下载。有没有人知道如何加快此过程并更快地开始下载?

这是我的代码:

# Make api call
response = requests.get(url, cookies=dict(JSESSIONID=self.session_id))
# write bytes to Http Response 
http = StreamingHttpResponse(io.BytesIO(response.content), content_type='application/zip')

http['Content-Disposition'] = 'attachment; filename="%s.zip"' % patient_id
return http

最佳答案

在传递信息之前,您正在将完整的响应下载到您的服务器。

您应该使用以下方法转发来自 API 调用的响应:

res = FROM API CALL
response = HttpResponse(ContentFile(res.content), 'application/zip')
response['Content-Disposition'] = 'attachment; filename={}.zip'.format(patient_id)
response['Content-Length'] = res.headers.get('Content-Length')
response['Content-Transfer-Encoding'] = res.headers.get('Content-Transfer-Encoding')
response['Content-Type'] = res.headers.get('Content-Type')
return response

确保复制所有重要的标题。


编辑:由于这是唯一提出的解决方案,我正在编辑以更易读的格式包含 John 评论中的解决方案:

# Make api call 
response = requests.get(url, cookies=dict(JSESSIONID=self.session_id), stream=True) 
# write bytes to Http Response 
http = StreamingHttpResponse(response.iter_content(8096), content_type='application/zip') 
http['Content-Disposition'] = 'attachment; filename="%s.zip"' % patient_id 
return http

关于来自 RESTful API 的 Django 流式传输 HTTP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174952/

相关文章:

python - Django allauth 访问 View

python - Django 测试中 TestCase 和 TransactionTestCase 类的区别

java - 设计 Restful API 路径 - 用于返回过滤后的资源和返回资源的修剪属性

asp.net - 如果发送的 HTTP 请求具有 "Access-Control-Allow-Origin",我如何在 Fiddler 中查看

python - django 无法连接 aws 上的 mysql 服务器

python - Django:如何从时间帖子中获得时差?

rest - 拒绝使用ajax调用Rest服务器设置不安全 header "Cookie"

mysql - NodeJS : Nested SQL query for custom REST API endpoint

android - 如何使用 NanoHTTPD(Android 内部)在 sdcard 上提供文件

python - 请求 Python : Passing payload POST request