通过节点 js 将响应从 python flask 转发到客户端

诺姆

在特殊情况下,我的节点 js 后端收到来自 python Flask 服务器的响应。

我需要将此响应转发回客户端(作为对客户端执行的操作的响应)。

响应应该在客户端浏览器上开始下载 python flask 响应正文中指定的文件。

python烧瓶响应返回的行:

return flask.send_file(download_path, as_attachment=True, attachment_filename=file)

我在我的节点服务器回调中收到此响应:

app.get(constants.routes.files.download, function (req, res) {
    fileController.downloadFile(req, (err, response_from_python) => {

        console.log("Response from python flask has arrived")
        res._headers = response_from_python.headers;
        res.set('Content-Disposition', 'attachment; filename=exmp_word.docx');
        return res.json(response_from_python.body)  

    });

这确实会在客户端浏览器上触发下载,但文件已损坏且无法用 word 打开(它是用 word 创建的...)。我认为这与文件在响应正文中的编码方式有关(我应该使用res.json吗?)。

另外,如果我从客户端直接连接到 python-server(不通过节点),那么文件会成功下载(没有损坏),但这不是它应该工作的方式(应该通过中间的节点服务器) .

我该怎么做?

有没有办法将 python 响应对象直接传递给客户端,而无需将其正文字段复制到节点 res 对象并修改标头?

编辑:

感谢 Ivan Velichko 我没有工作。

这是执行此操作的修改后的函数(我必须更好地构建它,但功能存在)。

app.get(constants.routes.files.download, function (req, res) {


res.set('content-Disposition', 'attachment; filename=noam_susp.docx');
res.set('content-type', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
res.set('Accept-Ranges', 'bytes');
res.set('Cache-Control', 'public, max-age=0');
res.set('ETag', 'W/"2721-161b23de2ee');



var file_hash = req.params.identifier;

var request = http.get(constants.manager_rest_api.base_url +
    constants.manager_rest_api.get_file_endpoint +
    '/' + file_hash + '/download_inner', function(response) {
    response.pipe(res);
});
伊万·维利奇科

看起来您的解决方案向 python 服务器发出请求,然后读取内存中的整个文件内容,然后仅出于某些原因尝试将其发送回客户端res.json()但是,很可能您只需要将客户端的请求转发到 python 服务器,然后按原样转发 python 的响应。你肯定不应该在你的节点服务器上下载文件。而是使用就像是:

app.get(constants.routes.files.download, function (req, res) {
    fileController.downloadFile(req).pipe(res);
});

要实现此行为,您fileController.downloadFile()应该返回一个可读流,然后您可以pipe()将其返回res. res本身已经是一个可写的流。

UPD:在管道中明确地将头从 python 的响应复制到节点的响应是很重要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将端口转发到DHCP客户端?

来自分类Dev

将端口转发到OpenVPN客户端

来自分类Dev

如何通过节点js将子节点添加到现有json文件中?

来自分类Dev

Wireguard 从客户端通过服务器转发到客户端的网络

来自分类Dev

如何在angular 4应用程序中通过REST API将客户端浏览器控制台日志转发到后端?

来自分类Dev

Google Cloud VM通过OpenVPN将minecraft流量转发到一个客户端,而不是另一个

来自分类Dev

将 google api 客户端库导入 python/flask

来自分类Dev

如何将HTTP响应转发到客户端

来自分类Dev

通过工作进程将响应返回给客户端的node.js模式是什么

来自分类Dev

节点Js将文件传递给客户端

来自分类Dev

是否可以将流量从 VPN 服务器转发到客户端之一?

来自分类Dev

将没有xserver的服务器的输出转发到我的x客户端

来自分类Dev

如何将基于ip的传入客户端转发到特定进程

来自分类Dev

CentOS 8.1:在没有NAT的情况下将OpenVPN客户端转发到LAN

来自分类Dev

OpenVPN服务器将传入的连接转发到客户端

来自分类Dev

Python Flask-客户端的GUI

来自分类Dev

我正在通过节点js将sqlite3查询结果作为json发送到浏览器

来自分类Dev

如何通过节点js服务器将Json对象发送到express-handlebars html?

来自分类Dev

如何在Flask(Python)中不向客户端发送任何响应

来自分类Dev

如何通过Nuxt.js服务器从Nuxt.js客户端发送请求,以及如何将响应接收回客户端

来自分类Dev

节点的平均距离通过节点数的对数增加python

来自分类Dev

通过节点在Mocha测试中使用Wolkenkit客户端“无法获取配置”

来自分类Dev

如何将信息从客户端发送到服务器(Flask-python)

来自分类Dev

AWS Dynamodb无法通过节点js同步获取数据

来自分类Dev

通过节点js调用jasper report rest api

来自分类Dev

如何将服务器端口从物理机转发到SoftEther中的VPN客户端?

来自分类Dev

我正在尝试找到一种在服务器端使用 GPIO 输入将客户端重定向到另一个网页 rpi、RPi.GPIO、python、flask、js 的方法

来自分类Dev

通过ALB将客户转发到特定的ENI

来自分类Dev

服务器和客户端之间的响应方法上的节点js错误

Related 相关文章

  1. 1

    如何将端口转发到DHCP客户端?

  2. 2

    将端口转发到OpenVPN客户端

  3. 3

    如何通过节点js将子节点添加到现有json文件中?

  4. 4

    Wireguard 从客户端通过服务器转发到客户端的网络

  5. 5

    如何在angular 4应用程序中通过REST API将客户端浏览器控制台日志转发到后端?

  6. 6

    Google Cloud VM通过OpenVPN将minecraft流量转发到一个客户端,而不是另一个

  7. 7

    将 google api 客户端库导入 python/flask

  8. 8

    如何将HTTP响应转发到客户端

  9. 9

    通过工作进程将响应返回给客户端的node.js模式是什么

  10. 10

    节点Js将文件传递给客户端

  11. 11

    是否可以将流量从 VPN 服务器转发到客户端之一?

  12. 12

    将没有xserver的服务器的输出转发到我的x客户端

  13. 13

    如何将基于ip的传入客户端转发到特定进程

  14. 14

    CentOS 8.1:在没有NAT的情况下将OpenVPN客户端转发到LAN

  15. 15

    OpenVPN服务器将传入的连接转发到客户端

  16. 16

    Python Flask-客户端的GUI

  17. 17

    我正在通过节点js将sqlite3查询结果作为json发送到浏览器

  18. 18

    如何通过节点js服务器将Json对象发送到express-handlebars html?

  19. 19

    如何在Flask(Python)中不向客户端发送任何响应

  20. 20

    如何通过Nuxt.js服务器从Nuxt.js客户端发送请求,以及如何将响应接收回客户端

  21. 21

    节点的平均距离通过节点数的对数增加python

  22. 22

    通过节点在Mocha测试中使用Wolkenkit客户端“无法获取配置”

  23. 23

    如何将信息从客户端发送到服务器(Flask-python)

  24. 24

    AWS Dynamodb无法通过节点js同步获取数据

  25. 25

    通过节点js调用jasper report rest api

  26. 26

    如何将服务器端口从物理机转发到SoftEther中的VPN客户端?

  27. 27

    我正在尝试找到一种在服务器端使用 GPIO 输入将客户端重定向到另一个网页 rpi、RPi.GPIO、python、flask、js 的方法

  28. 28

    通过ALB将客户转发到特定的ENI

  29. 29

    服务器和客户端之间的响应方法上的节点js错误

热门标签

归档