Python3.8.5 使用 http 请求将文件从一个 docker 容器发送到另一个容器时出现问题
Python3.8.5 problem to send file from one docker container to another using http request
我的 python(python3.8.5) 项目有问题!我有两个 docker 个容器。一个用于使用烧瓶的前端(container2)。我有一个网站,可以将请求(包请求)发送到第二个容器(后端)。在后端(container1)我必须创建一个包含多个文件的 zip 文件。那部分完成了。现在的问题是我怎样才能把这个文件放到前端(container2),然后我需要从那里通过网站下载它。
所以我需要一个解决方案来从前端向后端发送一个 http 请求(现在我有 requests.get(URL 到后端))。在响应中,我需要可以从网站下载的 zip 文件。
我用谷歌搜索了好几个小时,但找不到好的解决方案。我觉得如果我不必在前端和后端存储 zip 文件就好了。如果可能的话我想把它存储在后端并将它发送到前端并直接下载它。
希望您能理解我的问题并能帮助我。
Br
您可以代理来自前端的请求。
我假设你使用类似反应的东西。所以如果你添加一行:
"proxy": "http://backend-container:8080"
你的 package.json,前端应该代理到后端。
现在您可以发送像 http:///front-end/api/hello 这样的请求,它会到达后端。
不确定这是否是最佳解决方案,但可能有效。
示例:
https://create-react-app.dev/docs/proxying-api-requests-in-development/
https://medium.com/bb-tutorials-and-thoughts/react-how-to-proxy-to-backend-server-5588a9e0347
https://www.twilio.com/blog/react-app-with-node-js-server-proxy
一个可能不完整的解决方案,它可以满足您的描述。根据其他问题(如文件大小),这可能不是您真正想要的,但它确实有效。
例如,我有 2 个 flask 服务器:flask1(后端)和 flask2(前端):
flask1:
from flask import Flask, send_file, request
app = Flask(__name__)
@app.route('/get_file')
def get_image():
return send_file(request.args.get('name'))
flask2:
from flask import Flask, send_file, request
import io
import requests
app = Flask(__name__)
@app.route('/get_something')
def get_image():
r = requests.get("http://localhost:5000/get_file?name="+request.args.get('name'))
return send_file(io.BytesIO(r.content), mimetype=r.headers['Content-Type'],
as_attachment=True, attachment_filename="file")
要测试,您可以 运行 它们在不同的端口上,例如:
FLASK_APP=flask1.py flask run --port=5000
FLASK_APP=flask2.py flask run --port=8080
然后,如果您转到浏览器并使用 URL 访问前端,例如:
http://localhost:8080/get_something?name=download.png
前端会将请求“传递”到后端,然后重新发送它收到的内容,从而返回文件。
上面的代码没有解决的问题:文件命名和错误。
我的 python(python3.8.5) 项目有问题!我有两个 docker 个容器。一个用于使用烧瓶的前端(container2)。我有一个网站,可以将请求(包请求)发送到第二个容器(后端)。在后端(container1)我必须创建一个包含多个文件的 zip 文件。那部分完成了。现在的问题是我怎样才能把这个文件放到前端(container2),然后我需要从那里通过网站下载它。
所以我需要一个解决方案来从前端向后端发送一个 http 请求(现在我有 requests.get(URL 到后端))。在响应中,我需要可以从网站下载的 zip 文件。
我用谷歌搜索了好几个小时,但找不到好的解决方案。我觉得如果我不必在前端和后端存储 zip 文件就好了。如果可能的话我想把它存储在后端并将它发送到前端并直接下载它。
希望您能理解我的问题并能帮助我。 Br
您可以代理来自前端的请求。 我假设你使用类似反应的东西。所以如果你添加一行:
"proxy": "http://backend-container:8080"
你的 package.json,前端应该代理到后端。 现在您可以发送像 http:///front-end/api/hello 这样的请求,它会到达后端。 不确定这是否是最佳解决方案,但可能有效。
示例:
https://create-react-app.dev/docs/proxying-api-requests-in-development/
https://medium.com/bb-tutorials-and-thoughts/react-how-to-proxy-to-backend-server-5588a9e0347
https://www.twilio.com/blog/react-app-with-node-js-server-proxy
一个可能不完整的解决方案,它可以满足您的描述。根据其他问题(如文件大小),这可能不是您真正想要的,但它确实有效。
例如,我有 2 个 flask 服务器:flask1(后端)和 flask2(前端):
flask1:
from flask import Flask, send_file, request
app = Flask(__name__)
@app.route('/get_file')
def get_image():
return send_file(request.args.get('name'))
flask2:
from flask import Flask, send_file, request
import io
import requests
app = Flask(__name__)
@app.route('/get_something')
def get_image():
r = requests.get("http://localhost:5000/get_file?name="+request.args.get('name'))
return send_file(io.BytesIO(r.content), mimetype=r.headers['Content-Type'],
as_attachment=True, attachment_filename="file")
要测试,您可以 运行 它们在不同的端口上,例如:
FLASK_APP=flask1.py flask run --port=5000
FLASK_APP=flask2.py flask run --port=8080
然后,如果您转到浏览器并使用 URL 访问前端,例如:
http://localhost:8080/get_something?name=download.png
前端会将请求“传递”到后端,然后重新发送它收到的内容,从而返回文件。
上面的代码没有解决的问题:文件命名和错误。